Mysql 错误 1451 但找不到具有引用 ID 的行

Mysql error 1451 but no line with referenced id can be found

我需要从 A table 中删除一行。我收到 1451 错误,这意味着约束失败。但是当我试图找到这种关系时,什么也没有。

mysql> delete from A where id=961;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key 
    constraint fails (`xxx`.`B`, CONSTRAINT `FK_D273C62CBE4E457A` FOREIGN KEY 
    (`agencementDimension_id`) REFERENCES `A` (`id`))
mysql> select * from B where agencementDimension_id=961;
Empty set (0.00 sec)

约束已由 Doctrine + Symfony 2 生成。我添加了 "cascade delete" 并更新了模式,但没有任何改变 "The database schema is in sync with the mapping files"。

为避免此问题,请在您的限制条件中添加 ON DELETE CASCADE

这里 post 展示了如何在 symfony 学说中做到这一点

On delete cascade with doctrine2

这个错误是说你有 table A 字段名称 'id' 并且在某处用作字段 "agencementDimension_id" 的参考所以你不能删除这个记录

您必须删除所有子行才能删除此记录,或者您可以通过在外键约束

上设置 ON DELETE CASCADE 属性 来自动删除

使用 Symfony 2 和 Doctrine 2,由于 JoinColumn onDelete 属性,我添加了 ON DELETE CASCADE 约束:

 * @ORM\JoinColumn(name="agencementDimension_id", referencedColumnName="id", onDelete="CASCADE")

将 MySQL 错误消息更改为:

mysql> delete from A where id=961;
ERROR 1451 (23000): Cannot delete or update a parent row: 
a foreign key constraint fails (`xxx`.`C`, CONSTRAINT `FK_BF92805FD55A3663` 
FOREIGN (`agencementVersionDimension_id`) REFERENCES `B` (`id`))

我在B和C之间有了第二个关系。我不知道为什么MySQL一开始就不告诉我。无论如何,我已经能够从 C 中删除行,这允许我从 A 中删除行!