MYSQL: Cannot delete or update a parent row: a foreign key constraint fails

这可能是MySQL在InnoDB中设置了foreign key关联,造成无法更新或删除数据。可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况。

SET FOREIGN_KEY_CHECKS = 0;
删除完成后设置
SET FOREIGN_KEY_CHECKS = 1;
具体示例:

执行下面这个语句时报错:
update dba.dept set deptno=1110 where deptno=10;
报错:

Error Code: 1451
Cannot delete or update a parent row: a foreign key constraint fails (dba.employee2, CONSTRAINT FK94B9B0D6893F4F00 FOREIGN KEY (deptno) REFERENCES dept (deptno))

同理,当更新子表deptno=10的记录时也会报这个错误。

错误信息显示dba.employee2这个表有个外键约束,引用了dept表的deptno字段。

当子表中包含该数据,更新时则会报错。子表不包含该数据时,更新父表是不会报错的。

/*
也可以通过sql查询外键引用关系:
SELECT *
FROM information_schema.KEY_COLUMN_USAGE
WHERE referenced_table_name=‘dept’
AND referenced_column_name=‘deptno’
AND referenced_table_schema=‘dba’;

*/
想要删除父表的数据,需要先禁用外键约束检查:
SET FOREIGN_KEY_CHECKS = 0;
再执行更新语句即可

update dba.dept set deptno=1110 where deptno=10;

为了确保子表和父表数值一致,也要更新子表相应字段值:

update dba.employee2 set deptno=1110 where deptno=10;

题外话:

要想建立外键,必须确保父表中被引用的字段上创建了索引。否则,子表在创建外键时会报错:

Error Code: 1005
Can’t create table ‘dba.#sql-9d8_25’ (errno: 121)

转载:

原文链接:https://blog.csdn.net/yabingshi_tech/article/details/52290124

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值