Mysql外键级联动作(删除和更新)

本文探讨了在MySQL中使用外键进行表间关联的重要性,特别是外键的级联动作,如cascade、set null、restrict和no action。通过示例解释了这些操作如何影响父表和子表之间的数据同步,特别是在删除和更新记录时的行为差异。强调了InnoDB存储引擎对外键约束的支持,并指出未设置级联动作时的默认行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在实际开发中,我们创建表和表之间关联的时候很少用到外键,但是有时候需要用到外键,准确地说是用到外键的级联动作,例如你有一张用户表,存了一些用户的基本信息user表,如果这张表中的属性过多,我们可能需要另一张表也用来存储用户的信息,比如存一些登录信息,就叫login_user表,很明显这时候在login_user中设置一个外键去关联user表更合适,虽然不用外键也可以达到效果(使用触发器当然也行),为什么要设置外键呢?是因为我想在user表中删除一条记录的时候同时把user_login相应的记录也删除掉。好了于是我们在login_user表中添加了一个外键列user_id关联user表中的id,这时user表就叫父表,我们现在研究的是父表的删除和更新操作对子表的影响

这种影响有四个分类:cascade、set null 、restrict、no action。

1、cascade,如果你设置外键的更新或删除时设置为cascade,那么你对父表的删除或更新操作同时会删除或更新到子表,就以上面的两张表为例,你如果在user表中删除了一条id=1,001的记录,那么user_login中外键列user_id=1001 的记录都会被删除掉(如果没有的话当然不会删喽)。如果你把user表中的id=1002的记录改为id=100002那么在user_login表中外键列user_id=1002的记录也会全部改为100002,如果你不修改user表中的对照列id,去修改别的属性,那当然不会影响子表什么。这就是cascade。

2、no action 和 restrict 相同,指子表中有关联记录的情况下父表相应的记录不能更新或删除,还是拿上面的例子说,如果user_login表中外键列user_id有一个值为1004,同时user表中有一条记录id=1004的话,那么user表中id=1004的记录是删不掉的,你也不能修改它的id属性,你一删除或者修改id的话,mysql就会报出异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值