我将在我的应用程序的下一版本中使用 innodb 约束引入数据库完整性。一切顺利,但我的一些表有删除引用(死记录)的记录,因此我无法向表添加约束。
我在尝试:
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
对此的任何帮助将不胜感激。