Невозможно удалить запись при создании ограничений внешнего ключа вручную в MySQL без использования миграции. - PullRequest
0 голосов
/ 23 июня 2018

Я создал таблицы базы данных вручную, и я также создал ограничения внешнего ключа в таблицах вручную без использования миграции. теперь, когда я собираюсь удалить запись, она дает мне следующую ошибку-

Нарушение ограничения целостности: Невозможно удалить или обновить родительскую строку: Сбой ограничения внешнего ключа

Примечание: Я не могу использовать миграцию, поскольку база данных уже создана.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Я бы предложил исследовать это дальше, выполнив следующее:

  1. В вашей среде разработки напишите миграции для создания таблиц с нуля 2)
  2. Посмотрите на сгенерированную схему исравните его со схемой существующих производственных таблиц
  3. Обратите внимание на различия между двумя схемами и миграциями записи для исправления производственных таблиц.

Примечание:

Если вам необходимо исправить данные за это время и вы уверены, что целостность данных вашей базы данных не подвергается риску .Вы можете использовать следующие операторы, чтобы отбросить проверки внешнего ключа, пока вы исправляете данные.

SET FOREIGN_KEY_CHECKS = 0;

SET FOREIGN_KEY_CHECKS = 1;

Не могу не подчеркнуть, не забудьте включить проверку внешнего ключа после завершения и не делать этого в производственной базе данных .Возьмите копию базы данных и попробуйте локально, пока не убедитесь, что ваши исправления на 100% безопасны;)

0 голосов
/ 23 июня 2018

Используйте ON DELETE CASCADE и ON UPDATE CASCADE для внешних ключей, например:

...(create/alter Children table query)...
CONSTRAINT FK_ParentChild
FOREIGN KEY (parent_id) REFERENCES Parents(id) 
ON UPDATE CASCADE ON DELETE CASCADE;

Таким образом, вам не нужно вручную удалять дочерние элементы перед удалением родительского элемента. Все дочерние записи будут автоматически удалены вместе с удалением родительской записи.

...