Удалить повторяющиеся строки в таблице MySQL, но существует связь с внешним ключом? - PullRequest
2 голосов
/ 03 августа 2010

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

1 Ответ

2 голосов
/ 03 августа 2010

Если внешний ключ равен ON DELETE CASCADE, то удаление повторяющихся строк также приведет к удалению зависимых строк, например, если у вас есть таблица customers и таблица orders, а также внешний ключ, такой как ALTER TABLE orders ADD FOREIGN KEY customer_id REFERENCES customers (id) ON DELETE CASCADE, удаление клиента также приведет к удалению заказов этого клиента. Аналогично, если внешний ключ имеет ON DELETE SET NULL, то ордера не будут удалены, но их значения customer_id будут установлены в NULL.

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

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

...