Mysql错误1451但没有找到带引用id的行

时间:2016-05-30 10:14:44

标签: mysql symfony doctrine-orm cascade mysql-error-1451

我需要从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已经生成了约束。我添加了"级联删除"和更新的模式,但没有改变"数据库模式与映射文件同步#34;。

3 个答案:

答案 0 :(得分:1)

要避免此问题,请在您的约束中添加ON DELETE CASCADE

这里有一篇文章,展示了如何在symfony doctrine

中做到这一点

On delete cascade with doctrine2

答案 1 :(得分:0)

此错误表示您的表A包含字段名称' id'并且在某处作为参考用于现场" agencementDimension_id"所以你不能删除这条记录

您必须删除所有子行才能删除此记录,或者您可以通过在外键约束上设置ON DELETE CASCADE属性来自动删除

答案 2 :(得分:0)

使用Symfony 2和Doctrine 2,我添加了ON DELETE CASCADE,这要归功于JoinColumn onDelete属性的约束:

 * @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中删除行!