如果由于外键约束导致删除失败,如何调试mysql的删除?
示例:
我执行声明:
DELETE FROM SCHEMA_A.TABLE_A WHERE id=1;
并收到错误:
ERROR 1451: Cannot delete or update a parent row: a foreign key constraint fails (`SCHEMA_A`.`TABLE_B`, CONSTRAINT `FK123` FOREIGN KEY (`id`) REFERENCES `TABLE_C` (`id`) ON DELETE CASCADE)
现在,正如您所看到的,有一个" ON DELETE CASCADE"对于约束,因此这个问题似乎不仅包括约束。此外,我不直接从TABLE_C删除。
因此,我上面的问题与找到这种错误的真正原因有关。例如,获得类似"依赖图"的内容会很有帮助。 /"堆栈跟踪"删除路径(例如,TABLE_A FKxy导致删除TABLE_Y的条目与FKz导致删除TABLE_C中的条目)或实际上尝试删除哪些行。
答案 0 :(得分:0)
您应该能够使用此声明检查外键
SELECT TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME = '<table>';