mysql外键入门介绍
CREATE?TABLE?`dage`?(
?2
??`id`?int(11)?NOT?NULL?auto_increment,
?3
??`name`?varchar(32)?default?'',
?4
??PRIMARY?KEY??(`id`)
?5
)?ENGINE=InnoDB?DEFAULT?CHARSET=latin1;
?6
?7
CREATE?TABLE?`xiaodi`?(
?8
??`id`?int(11)?NOT?NULL?auto_increment,
?9
??`dage_id`?int(11)?default?NULL,
10
??`name`?varchar(32)?default?'',
11
??PRIMARY?KEY??(`id`),
12
??KEY?`dage_id`?(`dage_id`),
13
??CONSTRAINT?`xiaodi_ibfk_1`?FOREIGN?KEY?(`dage_id`)?REFERENCES?`dage`?(`id`)
14
)?ENGINE=InnoDB?DEFAULT?CHARSET=latin1;
插入个大哥:
1
mysql>?insert?into?dage(name)?values('铜锣湾');
2
Query?OK,?1?row?affected?(0.01?sec)
3
mysql>?select?*?from?dage;
4
+----+--------+
5
|?id?|?name???|
6
+----+--------+
7
|??1?|?铜锣湾?|
8
+----+--------+
9
1?row?in?set?(0.00?sec)
插入个小弟:
1
mysql>?insert?into?xiaodi(dage_id,name)?values(1,'铜锣湾_小弟A');
2
Query?OK,?1?row?affected?(0.02?sec)
3
4
mysql>?select?*?from?xiaodi;
5
+----+---------+--------------+
6
|?id?|?dage_id?|?name?????????|
7
+----+---------+--------------+
8
|??1?|???????1?|?铜锣湾_小弟A?|
9
+----+---------+--------------+
把大哥删除:
1
mysql>?delete?from?dage?where?id=1;
2
ERROR?1451?(23000):?Cannot?delete?or?update?a?parent?row:?a?foreign?key?constraint?fails?(`bstar/xiaodi`,?CONSTRAINT?`xiaodi_ibfk_1`?FOREIGN?KEY?(`dage_id`)?REFERENCES?`dage`?(`id`))
提示:不行呀,有约束的,大哥下面还有小弟,可不能扔下我们不管呀!
插入一个新的小弟:
1
mysql>?insert?into?xiaodi(dage_id,name)?values(2,'旺角_小弟A');??????????????
ERROR?1452?(23000):?Cannot?add?or?update?a?child?row:?a?foreign?key?constraint?fails?(`bstar/xiaodi`,?CONSTRAINT?`xiaodi_ibfk_1`?FOREIGN?KEY?(`dage_id`)?REFERENCES?`dage`?(`id`))
提示:小子,想造反呀!你还没大哥呢!
把外键约束增加事件触发限制:
?1
mysql>?show?create?table?xiaodi;


??CONSTRAINT?`xiaodi_ibfk_1`?FOREIGN?KEY?(`dage_id`)?REFERENCES?`dage`?(`id`)


mysql>?alter?table?xiaodi?drop?foreign?key?xiaodi_ibfk_1;?
Query?OK,?1?row?affected?(0.04?sec)
Records:?1??Duplicates:?0??Warnings:?
mysql>?alter?table?xiaodi?add?foreign?key(dage_id)?references?dage(id)?on?delete?cascade?on?update?cascade;
Query?OK,?1?row?affected?(0.04?sec)
Records:?1??Duplicates:?0??Warnings:?0
mysql>?delete?from?dage?where?id=1;
Query?OK,?1?row?affected?(0.01?sec)
mysql>?select?*?from?dage;
Empty?set?(0.01?sec)
mysql>?select?*?from?xiaodi;
Empty?set?(0.00?sec)
得,这回对应的小弟也没了,没办法,谁让你跟我on delete cascade了呢!
例子说明的应该蛮清楚了吧,其他功能对应手册自己实践吧!:-)