一个示例教程,以快速了解MySQL中的主关键字和外键

主键和外键的关系,很少流行,我现在有一个论坛,两个表,一个线程是线程,一个是回复回复。

一是主密钥,主密钥是表内唯一字段标识记录,一般是邮政ID,反映在访问中,例如,

线。phpid = 1说我要去参观一个ID是1。

再来说说外键,我们删除帖子时,需要执行另一个操作是删除所有的回复,如果在正常情况下,我们需要完成两删除操作(线程和回复),这时如果有外键,例如,一个指针在回复表面线程的表的主键的建立(ID外键(外键)领域,必须与相应的职务身份),并指定响应删除,当你删除线程,MySQL会帮助你把这个帖子的回复表被删除,没有回复,你需要手动去执行删除操作的回复表

对于这两个关系,在示例中,应答表的外键指向线程表的主键。

例如,一个简单的戴奇和Xiaodi两个表的使用示范,大哥是主要的关键,弟弟的表的外键:

表的构造:


创建表(`打歌`
` ID ` int(11)不为空auto_increment,
`名字` varchar(32)违约,
主键(id)
)发动机= InnoDB默认字符集= latin1;

创建表(` xiaodi `
` ID ` int(11)不为空auto_increment,
` dage_id ` int(11)默认为空,
`名字` varchar(32)违约,
主键(id),
关键` dage_id `(` dage_id `),
约束` xiaodi_ibfk_1 `外键(` dage_id `)参考`打歌`(` ID `)
)发动机= InnoDB默认字符集= latin1;




插入一个大哥:




MySQL >插入戴奇(人名)值('tongluowan);




查询OK,1行受影响(0.01秒)




MySQL >选择*从Dage;




+——+ -------- +
| ID |名字|
+——+ -------- +
| 1 |铜锣湾|
+——+ -------- +
1行集(0秒)




插入一个小弟弟:




MySQL >插入Xiaodi(dage_id,名字)值(1,铜锣湾_哥哥);





查询OK,1行受影响(0.02秒)




mysql select * from Xiaodi >;




+ -- + + + --------- --------------
我dage_id名字| | | |
+ -- + + + --------- --------------
| 1 | 1 |铜锣湾_哥哥|
+ -- + + + --------- --------------




除去大哥:




MySQL >删除从Dage那里id = 1;




错误1451(23000):不能删除或更新父行:外键、A(h)。




提示:不,有约束。在大哥的下面有一个小弟弟,但是我们不能把它扔下去。

插入一个新的小弟弟:


MySQL >插入Xiaodi(dage_id,名字)值(2 _哥哥,Mong Kok);







2error 1452(23000):无法添加或更新子行:外键,(H)。





提示:男孩,想造反!你还没有大哥。

将外部键约束添加到事件触发限制:


MySQL >显示创建表Xiaodi;

约束` xiaodi_ibfk_1 `外键(` dage_id `)参考`打歌`(` ID `)
MySQL >修改表的外键xiaodi_ibfk_1 Xiaodi滴;




查询OK,1行受影响(0.04秒)
记录:1个重复:0个警告:




MySQL >修改表添加外键(Xiaodi dage_id)引用戴奇(ID)上。




查询OK,1行受影响(0.04秒)
记录:1个重复:0个警告:0




再次尝试删除大哥:




MySQL >删除从Dage那里id = 1;




查询OK,1行受影响(0.01秒)





MySQL >选择*从Dage;




空集(0.01秒)





mysql select * from Xiaodi >;




空集(0秒)






是的,这次对应的小弟没有,没办法,谁让你和我一起删级联的!

这个例子应该清楚清楚,其他功能相应的手工练习吧!:-)