首页 > 数据库技术 > 详细

mysql涉及外键的级联操作

时间:2019-08-09 11:32:36      阅读:147      评论:0      收藏:0      [点我收藏+]

1. 准备测试表

# 专业表major
 create table major(id int primary key auto_increment, mmane varchar(20))engine=innodb default charset=utf8;

# 学生表mstudent
create table mstudent(id int primary key auto_increment, name varchar(20), major int)engine=innodb default charset=utf8;

# 添加外键约束(级联删除)
alter table mstudent add constraint fk_major_stu foreign key(major) references major(id) on delete cascade;

# 插入数据
insert into major values(null, python), (null, java), (null, go);

insert into mstudent select null, A, 1 union select null, B, 1 union select null, C, 1 union select null, D, 2 union select null, E, 2 union select null, F, 2 union select null, G, 3 union select null, H, 3 union select null, J, 3 union select null, K, 3;

技术分享图片

技术分享图片

 

1. 级联删除

如果没有在添加外键约束时显式声明级联类型,那么在对主表(外键引用表)相关字段A做DML(UPDATE DELETE INSERT)操作时,从表(有外键约束)中拥有引用自主表字段A的数据行就会发生冲突,造成错误。换句话说,要删除或更新主表数据,就需要先删除或更新从表相关数据

当一个外键的级联类型为DELETE CASCADE时,便支持直接删除主表数据(特别是主表数据被从表引用)

技术分享图片

 

3. 级联更新(UPDATE CASCADE)

ALTER TABLE ADD CONSTRAINT fk_major_stu FOREIGN KEY(major) REFERENCES major(id) ON UPDATE CASCADE; 

可以不用先更新从表数据,直接更新主表数据,从表自动更新。

 

4. 级联置空(SET NULL)

ALTER TABLE ADD CONSTRAINT fk_major_stu FOREIGN KEY(major) REFERENCES major(id) ON SET NULL; 

可以不用先删除从表数据,直接删除主表数据,从表自动置空相关数据。

 

mysql涉及外键的级联操作

原文:https://www.cnblogs.com/kisun168/p/11326045.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!