2016-05-30 6 views
1

Мне нужно удалить строку из таблицы. Я получаю ошибку 1451, что означает, что ограничение не выполнено. Но когда я пытаюсь найти это отношение, ничего не возникает.Ошибка Mysql 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) 

Ограничение было порождено Доктриной + Symfony 2. Я добавил «каскадное удаление» и обновленный схему, но ничего не изменилось «Схема базы данных в синхронизации с файлами отображение».

+0

Попробуйте удалить дочерние строки, которые связаны с id = 961 –

+1

В следующий раз, если вы создаете отношения, и если у вас есть этот тип, используйте ON DELETE CASCADE при создании ограничения –

ответ

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!

1

Чтобы избежать этой проблемы ADD ON DELETE CASCADE в вашем contraint

здесь пост, показывающий, как это сделать в симфони доктрины

On delete cascade with doctrine2

+0

Я использую доктрину Symfony + для генерации схемы и запроса, Я не хочу связываться с автоматически сгенерированными ограничениями:/ – Shakealot

+0

Добавив «onDelete = CASCADE», сообщение об ошибке mysql изменилось, и я заметил, что у меня была третья таблица, ребенок ребенка! В этом была проблема, я добавил «onDelete = CASCADE» во второе отношение тоже, и это сделало трюк! Благодаря ! Мне нужно создать сообщение с решением и пометить его как разрешенное? – Shakealot

+0

добро пожаловать! вы можете ответить на свой вопрос –

0

Эта ошибка говорит, что у вас есть таблица А с именем поля ' id 'и который используется где-то в качестве ссылки для поля "agencementDimension_id", поэтому вы не можете удалить эту запись.

Вы должны либо удалить все дочерние строки, чтобы удалить этот reco го или вы можете автоматически удалить, установив ON DELETE CASCADE свойства на внешнем ключе Constrain

+0

Если вы посмотрите на мой второй запрос, я не нашел ни одного ребенка. Вот что делает меня подозрительным. – Shakealot

+0

Проверьте и следуйте принятому ответу здесь http://stackoverflow.com/questions/14257004/doctrine2-symfony2-cascading-remove-integrity-constraint-violation-1451 http://stackoverflow.com/questions/8487042/symfony2- doctrinefixturesbundle-cant-load-fixtures-due-to-foreign-key-constra Я думаю, что любой из них должен решить вашу проблему – Rupal