以下为引用https://blog.csdn.net/yabingshi_tech/article/details/52290124
MYSQL: Cannot delete or update a parent row: a foreign key constraint fails
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)