MySQL外键级联如何实现

简介

%ign%ignore_a_1%re_a_1%外键起到约束作用,在数据库层面保证数据的完整性。
例如使用外键的cascade(cascade串联)类型,当子表(例如user_info)关联父表(例如user)时,父表更新或删除时,子表会更新或删除记录,这个过程是数据库层面完成的。
早期企业系统数据库设计里面比较多,虽说帮程序员节省了delete、update操作,实际上增加了潜规则,也增加了软件复杂度,也会减弱性能。

所以在应用程序设计中,我们应尽量在应用层保证数据的完整性(如使用事务处理机制),而不是数据库层面。

下面对MySQL的外键进行介绍。

MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引子表在创建外键的时候也会自动创建对应的索引。

在创建索引的时候,可以指定在删除、更新父表时,对子表进行的相应操作,包括

RESTRICT (restrict 约束 限制)

NO ACTION

SET NULL

CASCADE (串联)

RESTRICT和NO ACTION相同,是指在子表有关联记录的情况下父表不能更新
CASCADE表示父表更新或者删除时,更新或者删除子表对应记录
SET NULL则是表示父表在更新或者删除的时候,子表的对应字段被SET NULL。

示例

因为只有InnoDB引擎才允许使用外键,所以,我们的数据表必须使用InnoDB引擎。

创建数据库:

Create database test;

一、首先创建两张表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');

MySQL外键级联如何实现

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

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

delete from stu where sid = '2';

MySQL外键级联如何实现

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

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

MySQL外键级联如何实现

注意

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

MySQL外键级联如何实现

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

MySQL外键级联如何实现

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

以上就是MySQL外键级联如何实现的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/152765.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月3日 19:21:02
下一篇 2025年12月3日 19:59:52

相关推荐

发表回复

登录后才能评论
关注微信