Я вводю целостность базы данных, используя ограничения innodb в следующей версии моего приложения. Все идет хорошо, но в некоторых моих таблицах есть записи с удаленными ссылками (мертвые записи), и из-за них я могу ' t добавить ограничения в таблицу.
Я пытаюсь:
ALTER TABLE `article` ADD FOREIGN KEY (`author_id`) REFERENCES `authors` (`id`) ON DELETE CASCADE;
И получаю:
#1452 - Cannot add or update a child row: a foreign key constraint fails (`books`.<result 2 when explaining filename '#sql-442_dc'>, CONSTRAINT `#sql-442_dc_ibfk_1` FOREIGN KEY (`author_id`) REFERENCES `authors` (`id`) ON DELETE CASCADE)
Выполняя этот запрос, я обнаружил, что более 500 записей не имеют ссылок (авторы были удалены, но их статьи остались):
SELECT `articles`.`id`
FROM `articles` LEFT JOIN `authors` ON `articles`.`author_id` = `authors`.`id`
WHERE ISNULL(`authors`.`id`);
Итак, прежде чем я смогу добавить ограничение, я должен разобраться с ними. Как мне удалить все записи, которые я получаю с помощью указанного выше запроса?
Я пробовал:
DELETE FROM `articles` WHERE `id` IN (
SELECT `articles`.`id`
FROM `articles` LEFT JOIN `authors` ON `articles`.`author_id` = `authors`.`id`
WHERE ISNULL(`authors`.`id`);
)
Но mysql отвечает:
You can't specify target table 'articles' for update in FROM clause
Любая помощь по этому поводу будет принята с благодарностью.