MySQL外键约束

三个条件:

  1. 两个表的存储引擎必须是InnoDB
  2. 索引型
  3. 数据类型相同

如果子表试图创建一个在父表中不存在的外键值,InnoDB会拒绝任何INSERT或UPDATE操作。

如果父表试图UPDATE或者DELETE任何子表中存在或匹配的外键值,最终动作取决于外键约束定义中的ON UPDATE和ON DELETE选项。

设置InnoDB的动作,默认为RESTRICT: 拒绝删除或者更新父表。

外键约束的两种情况

  1. 父表更新时子表也更新,父表删除时如果子表有匹配的项,删除失败;外键定义为ON UPDATE CASCADE ON DELETE RESTRICT

  2. 父表更新时子表也更新,父表删除时子表匹配的项也删除。外键定义为ON UPDATE CASCADE ON DELETE CASCADE

on delete和on update都有下面四种动作。

cascade:主表删除或更新相应的数据行,则子表同时删除或更新与主表相匹配的行,即级联删除、更新。
set null:主表删除或更新相应的数据行,则子表同时将与主表相匹配的行的外键列置为null。当外键列被设置为not null时无效。
no action:数据库拒绝删除或更新主表。
restrict:数据库拒绝删除或更新主表。如果未指定on delete或on update的动作,则on delete或on update的默认动作就为restrict。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值