1

我需要从 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 生成了约束。我添加了“级联删除”并更新了架构,但没有任何改变“数据库架构与映射文件同步”。

4

3 回答 3

1

为了避免这个问题ON DELETE CASCADE在你的约束中添加

这里有一篇文章展示了如何在 symfony 学说中做到这一点

在删除级联与教义2

于 2016-05-30T10:25:33.877 回答
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 中删除行!

于 2016-05-30T12:15:37.207 回答
0

此错误表示您有字段名称为“id”的表 A,并且在某处用作字段“agencementDimension_id”的参考,因此您无法删除此记录

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

于 2016-05-30T10:27:14.577 回答