gpt4 book ai didi

mysql - 交易后删除关系中的记录

转载 作者:行者123 更新时间:2023-11-29 08:00:19 25 4
gpt4 key购买 nike

我有两个表 - booksbooks_authors,其中 books_authors.user_idbooks.id 之间存在关系> 带有标记ON DELETE CASCADE的列。

我还有从 XML 文件将数据导入数据库的机制,问题是,当我想用​​新数据重新加载整个 books 表时,books_authors 中的所有记录em>消失了,甚至关系实际上还存在。该机制的MySQL代码如下:

START TRANSACTION;
DELETE * FROM books;
INSERT books (...) VALUES (...);
INSERT books (...) VALUES (...);
INSERT books (...) VALUES (...);
...
COMMIT;

完成此事务后,我得到了包含新数据的 books 表,但 books_authors 表为空。

我可以做什么来告诉MySQL,在事务后检查关系吗?

最佳答案

如果您不希望 books 表上的删除级联到 books_authors,则需要暂时​​禁用 FOREIGN_KEY_CHECKS session 变量。

然后,如果您想在重新插入 books 表后删除孤立记录,可以使用多表删除语法和外连接来实现。

这样的事情应该有效:

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;

DELETE * FROM books;
INSERT books (...) VALUES (...);
INSERT books (...) VALUES (...);
INSERT books (...) VALUES (...);
...

delete c.*
from books_authors c
left join books p
on c.book_id=p.id
where p.id is null;

SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;

关于mysql - 交易后删除关系中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23995221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com