一个示例教程,以快速了解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秒)
是的,这次对应的小弟没有,没办法,谁让你和我一起删级联的!
这个例子应该清楚清楚,其他功能相应的手工练习吧!:-)