MySQL使用外键实现级联删除和更新
本文的示例说明MySQL使用外键实现级联删除和更新的方法:MySQL InnoDB存储引擎只支持外键。创建外键时,父表必须具有相应的索引。子表中自动创建相应的索引创建外键时。创建索引时,可以指定相应的操作在子表当您删除或更新父表,包括限制,没有行动,空集和级联,限制,没有行动,是指子表是记录的父表不能更新相关;级联是在更新父表、删除、更新或删除对应的子表的记录集为空;在父表中表示当表被更新或删除后,该字段设置为空。
因为只有InnoDB引擎允许使用外键,数据表必须使用InnoDB引擎。我使用的版本是MySQL5.1版本,和过程如下:
创建数据库:
创建数据库测试;
创建一个表,其中第一表的ID是第二个表的外键(用户信息):
创建表(用户)
int(4)不为空,
`性`枚举(F,真的)默认为空,
主键(id)
InnoDB引擎=默认的字符集latin1);
创建表(` UserInfo `
`锡` int(4)不为空auto_increment,
` userid ` int(4)不为空,
`信息` varchar(20)默认为空,
主键(SN),
关键` userid `(` userid `),
约束` userinfo_ibfk_1 `外键(` userid `)参考`用户`(` ID `)级联删除对
InnoDB引擎=默认的字符集latin1);
小心 uff1a
1,存储引擎必须使用InnoDB引擎。
2,外键必须被索引;
3、外键约束关系来使用级联删除、更新,这意味着如果外键数据被删除或更新相关的数据将被删除或更新。有关更多信息,请参阅在MySQL InnoDB文件手册;
好的,那么我们将再次插入数据测试。
插入'用户'(id,‘性')
值(1,F),(2 ',是'),(3,F);
插入` UserInfo `(`锡`,` userid `,`信息`)
值(1,1,'2005054dsf),
(2,1,'fdsfewfdsfds),
(3,1,'gdsgergergrtre),
(4,2,'et34t5435435werwe),
(5,2,'435rtgtrhfghfg),
(6,2,'ret345tr4345),
(7',3','fgbdfvbcbfdgr),
(8',3','45r2343234were),
(9,3','wfyhtyjtyjyjy);
让我们看一下当前数据表的状态:
显示表;
---------------- + +
| tables_in_test |
---------------- + +
|用户|
| UserInfo |
---------------- + +
2行(0秒)
用户表中的数据:
从用户中选择*;
+ + +
| ID |性|
+ + +
| 1 | F |
| 2 | M |
| 3 | F |
+ + +
3行(0秒)
在用户信息表中的数据:
MySQL >选择*从用户信息;
+ -- + + + -------- -------------------
SN用户名信息| | | |
+ -- + + + -------- -------------------
| 1 | 1 | 2005054dsf |
| 2 | 1 | fdsfewfdsfds |
| 3 | 1 | gdsgergergrtre |
| 4 | 2 | et34t5435435werwe |
| 5 | 2 | 435rtgtrhfghfg |
| 6 | 2 | ret345tr4345 |
| 7 | 3 | fgbdfvbcbfdgr |
| 8 | 3 | 45r2343234were |
| 9 | 3 | wfyhtyjtyjyjy |
+ -- + + + -------- -------------------
9行(0秒)
我们不相信上述不定up.ok难,现在我们要测试我们的级联删除。
我们将删除用户表的ID的数据记录,2看在userinf表用户标识相关的个子记录将被自动删除。
删除操作的执行是成功的!
MySQL >删除用户ID,` ` ` ` = 2;
查询OK,1行受影响(0.03秒)
查看用户表中没有id 2的数据记录!
从用户中选择*;
+ + +
| ID |性|
+ + +
| 1 | F |
| 3 | F |
+ + +
2行(0秒)
再看看3的数据记录,没有用户名2用户信息表,和相应的数据被自动删除!
MySQL >选择*从用户信息;
+ -- + + + -------- ----------------
SN用户名信息| | | |
+ -- + + + -------- ----------------
| 1 | 1 | 2005054dsf |
| 2 | 1 | fdsfewfdsfds |
| 3 | 1 | gdsgergergrtre |
| 7 | 3 | fgbdfvbcbfdgr |
| 8 | 3 | 45r2343234were |
| 9 | 3 | wfyhtyjtyjyjy |
+ -- + + + -------- ----------------
6行(0秒)
更新操作也类似,因为我们在构建表之前定义了外键删除和更新操作,因此我们可以直接在级联上测试数据。
将用户表中原始id的数据记录更改为id的1到4,如下所示:
MySQL >更新用户组ID = 4,ID = 1;
查询OK,1行受影响(0.03秒)
匹配行:1更改:1个警告:0
现在看看两个表数据是否已经改变了。
从用户中选择*;
+ + +
| ID |性|
+ + +
| 3 | F |
| 4 | F |
+ + +
2行(0秒)
MySQL >选择*从用户信息;
+ -- + + + -------- ----------------
SN用户名信息| | | |
+ -- + + + -------- ----------------
| 1 | 4 | 2005054dsf |
| 2 | 4 | fdsfewfdsfds |
| 3 | 4 | gdsgergergrtre |
| 7 | 3 | fgbdfvbcbfdgr |
| 8 | 3 | 45r2343234were |
| 9 | 3 | wfyhtyjtyjyjy |
+ -- + + + -------- ----------------
6行(0秒)
与原始表相比,可以发现它们已经成功更新,测试完成了!!!这也使得使用外键可以同时删除和更新多个相关表,从而确保数据的一致性。
有关MySQL相关内容的更多读者感兴趣的可以看到专用站:
希望本文能帮助您了解MySQL数据库仪表。