我需要从 A 表中删除一行。我收到 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产生了约束。我添加了"级联删除"并更新了架构,但没有任何变化"数据库架构与映射文件同步"。
为了避免这个问题,请在你的 contraint 中添加ON DELETE CASCADE
这里有一篇帖子展示了如何在Symfony学说中做到这一点
关于删除与学说的级联2
此错误表示您有字段名称为"id"的表 A,并且在某处用作字段"agencementDimension_id"的引用,因此您无法删除此记录
您必须删除所有子行才能删除此记录,或者您可以通过在外键约束上设置ON DELETE CASCADE
属性来自动删除
使用 Symfony 2 和 Doctrine 2,我在约束中添加了 ON DELETE CASCADE,这要归功于 JoinColumn onDelete 属性:
* @ORMJoinColumn(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 中删除行!