gpt4 book ai didi

MySQL:在一个表中插入记录,从另一个表读取,不锁定

转载 作者:行者123 更新时间:2023-11-30 23:39:02 25 4
gpt4 key购买 nike

我主要是想这样做:

INSERT INTO stuff_to_archive
SELECT a.id FROM stuff a INNER JOIN items b ON a.b_id = b.id AND (other conditions on b)

基本上,“东西”变得太大了,我想每晚归档旧记录。 Stuff_to_archive 具有要存档的记录的 ID,我稍后将其用作辅助以确保我正在创建和删除相同的记录。我试图在不锁定“内容”或“项目”的情况下执行此操作,因此我网站的其余部分可以继续工作。

我正在加入项目,因为项目有关于我可以存档哪些“资料”记录的信息。现在,与此查询匹配的所有记录(在两个表中)都不会被写入。这两个表一直都在添加新记录,并且“项目”有更新的记录,但不是我正在匹配的记录(因为那些是旧的并且不再被触及)

Stuff 和 Items 是 InnoDB。 Stuff_to_archive 是内存。

有没有什么方法可以运行该查询而不阻止对内容和项目的其他读/写?我试过了

set SESSION transaction isolation level READ UNCOMMITTED;

但这似乎仍然阻碍了一切。

这个 INSERT 在 stuff_to_archive 表中创建了大约 200 万条记录。

有没有办法在不阻塞其他查询的情况下进行此 INSERT?

谢谢!
丹尼尔

最佳答案

我对 InnoDB 锁不是很好,但是在 InnoDB 中有一个全局设置和一个隔离级别的 session 设置,您可以从 MySQL 终端检查它们:

SELECT @@GLOBAL.tx_isolation, @@tx_isolation;

尝试设置全局事务级别:

SET GLOBAL transaction isolation level READ UNCOMMITTED;

您也可以尝试为所有新连接禁用autocommit,看看这是否会有所不同

SET GLOBAL init_connect='SET autocommit=0';

关于MySQL:在一个表中插入记录,从另一个表读取,不锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5066669/

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