mysql数据传输完整性_mysql – 处理数据库完整性

在升级应用程序的数据库部分时,遇到了因删除引用导致的死记录问题,阻碍了外键约束的添加。通过查询发现500多条文章记录的作者已被删除,导致无法直接添加外键约束。为了解决这个问题,需要先删除这些无引用的记录。尝试的删除语句由于语法错误未能执行。寻求解决方案来有效地删除这些记录。
摘要由CSDN通过智能技术生成

我正在使用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

任何有关这方面的帮助将不胜感激.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值