gpt4 book ai didi

mysql - 在不锁定表的情况下进行许多 INSERT 的事务

转载 作者:行者123 更新时间:2023-11-29 01:51:44 25 4
gpt4 key购买 nike

我有在数据库中创建相同数据的脚本。看起来像:

START TRANSACTION;
INSERT INTO table (data);
INSERT INTO table (data);
INSERT INTO table (data);
...
COMMIT;

脚本运行了大约 30 分钟。但是当它工作时,该表被锁定以进行其他插入。在脚本结束之前,我无法从另一个进程中插入任何行。有必要吗?我想使用事务,但我无法锁定整个表。有什么办法吗?

最佳答案

你可以改为:

START TRANSACTION;
INSERT INTO table (data);
COMMIT;
START TRANSACTION;
INSERT INTO table (data);
COMMIT;
...
START TRANSACTION;
INSERT INTO table (data);
COMMIT;

不是最优雅的,但它应该根据您描述的情况解决您的问题。

如果您需要将整个项目作为一个 TRANSACTION,那么最好的做法如下:

INSERT INTO tmpTableA (dataX);
INSERT INTO tmpTableB (dataY);
INSERT INTO tmpTableC (dataZ);
...
' Do all the "building / processing above using temp tables either in memory or on disc, and then only when all the "heavy lifting" is done; update/insert the data into your tables.
...
START TRANSACTION;
INSERT INTO tableA (tmpTableA);
UPDATE tableB.foo = tmpTableB.fee WHERE BlahBlobBlah;
INSERT INTO tableC (tmpTableC);
COMMIT;

您想推迟开始交易,直到所有处理完成。

关于mysql - 在不锁定表的情况下进行许多 INSERT 的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40031264/

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