У меня есть база данных, которая изначально была в MyISAM и поэтому не имела ограничений внешнего ключа.В результате было довольно много потерянных строк, где запись, на которую ссылается внешний ключ, была с тех пор удалена.
Чтобы исправить это, я решил преобразовать в InnoDB и добавить внешние ключи с CASCADE для обоих обновленийи удаление.Однако, когда я пытаюсь добавить внешний ключ, я получаю такие ошибки (из консоли Navicat 8):
1452 - Cannot add or update a child row: a foreign key constraint fails
(`database`.`#sql-1358_38d`, CONSTRAINT `#sql-1358_38d_ibfk_1` FOREIGN KEY
(`manufacturerID`) REFERENCES `manufacturer` (`ID`) ON DE)
Я знаю, почему это происходит, из-за потерянных строк.Есть ли способ, чтобы создание ограничения автоматически очистило эти строки?Потребуются годы, чтобы просмотреть все таблицы и найти потерянные строки.
Это один из запросов, которые я выполняю на всякий случай:
ALTER TABLE part_number ADD CONSTRAINT
FOREIGN KEY(manufacturerID)
REFERENCES manufacturer(ID)
ON DELETE CASCADE
ON UPDATE CASCADE;