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