У меня есть база данных, которая изначально была в MyISAM и поэтому не имела ограничений внешнего ключа. В результате существует немало сиротских строк, в которых запись, которую ссылается на внешний ключ, с тех пор была удалена.MySQL InnoDB - создать ограничение внешнего ключа CASCADE, когда данные уже существуют, что нарушает его?
Чтобы исправить это, я решил конвертировать в 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;
Ну это по сути то, что я начал делать, но это займет некоторое время, просто интересно, если есть возможность не придется делать это вручную. – Gnuffo1