Mysql实现级联操作(级联更新级联删除)

Posted 下页、再停留

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql实现级联操作(级联更新级联删除)相关的知识,希望对你有一定的参考价值。

一、首先创建两张表stu,sc

create table stu(
sid int UNSIGNED primary key auto_increment,
name varchar(20) not null)
TYPE=InnoDB charset=utf8;

create table sc(
scid int UNSIGNED primary key auto_increment,
sid int UNSIGNED not null,
score varchar(20) default \'0\',
index (sid),   --外键必须加索引
FOREIGN KEY (sid) REFERENCES stu(sid) ON DELETE CASCADE ON UPDATE CASCADE)
TYPE=InnoDB charset=utf8;

--说明: 外键必须建立索引;

FOREIGN key(sid)  设置外键,把sid设为外键

REFERENCES stu(sid) 引用作用。引用stu表中的sid

ON DELETE CASCADE 级联删除
ON UPDATE CASCADE 级联更新

二、向两张表插入数据

insert into stu (name) value (\'zxf\');
insert into stu (name) value (\'ls\');
insert into stu (name) value (\'zs\');
insert into stu (name) value (\'ww\');

insert into sc(sid,score) values (\'1\',\'98\');
insert into sc(sid,score) values (\'1\',\'98\');
insert into sc(sid,score) values (\'2\',\'34\');
insert into sc(sid,score) values (\'2\',\'98\');
insert into sc(sid,score) values (\'2\',\'98\');
insert into sc(sid,score) values (\'3\',\'56\');
insert into sc(sid,score) values (\'4\',\'78\');
insert into sc(sid,score) values (\'4\',\'98\');

 

注意:在sc表中插入数据时,若插入的sid为22,则会插入失败,违反外键约束,因为外键sid
来自stu表中的id的主键,即stu中的id没有等于22的数据。

级联删除:将stu表中id为2的学生删除,该学生在sc表中的成绩也会级联删除

delete from stu where sid = \'2\';

 


级联更新:stu表中id为3的学生更改为id为6,该学生在sc表中的对应id也会级联更新

update stu set sid=6 where sid=\'3\';

 

注意

删除表的时候必须先删除外键表(sc),再删除主键表(stu)

 

上图为违反外键约束,不能删除

上图为正常删除,先删除sc表,再删除stu表!

 

以上是关于Mysql实现级联操作(级联更新级联删除)的主要内容,如果未能解决你的问题,请参考以下文章

SQL 级联删除与级联更新的方法

MySQL中利用外键实现级联删除更新

MySQL中利用外键实现级联删除更新

sql 级联删除问题

[原创]MYSQL中利用外键实现级联删除和更新

MySQL中利用外键实现级联删除更新