Ошибка Mysql 1451, но строка с ссылочным идентификатором не найдена

Вопрос: Мне нужно удалить строку из таблицы. Я получаю ошибку 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

Вопрос:

Мне нужно удалить строку из таблицы. Я получаю ошибку 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” и обновленную схему, но ничего не изменилось “Схема базы данных синхронизирована с файлами сопоставления”.

Лучший ответ:

Используя 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!

Ответ №1

Чтобы избежать этой проблемы, ДОБАВЛЯЙТЕ ON DELETE CASCADE в своих целях

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

При удалении каскада с doctrine2

Ответ №2

Эта ошибка говорит о том, что у вас есть таблица A с именем поля “id” и которая где-то используется как ссылка для поля “agencementDimension_id”, поэтому вы не можете удалить эту запись

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

Оцените статью
Добавить комментарий