gpt4 book ai didi

MySQL 事务和并发插入

转载 作者:行者123 更新时间:2023-11-29 13:54:45 34 4
gpt4 key购买 nike

我得到了某人制作的这个脚本,我查看了它并发现了一些我不确定是否安全的内容:

在一个事务内,有 2 个连续的插入,位于 2 个不同的表中,两个表都具有自动递增的主键。它们应该是相同的(第一次插入生成的主键 = 第二次插入生成的主键)。

别问我为什么,剧本就是这么写的。

我是事务新手,我不太清楚这里是否存在并发问题。我正在考虑另一个线程同时运行并最终生成如下 key 的可能性:

Thread #1:    Table_A ID: 3                                        Table_B ID: 4
Thread #2: Table_A ID: 4 Table_B ID: 3

我很确定(我今天才第一次准备好与交易相关的文档)交易无法防止这种情况,但我只是想确保我做对了。

谢谢!

最佳答案

您需要将两个连接置于可序列化事务隔离级别,以避免出现您所描述的情况,方法是在每个连接上设置 tx_isolation:

SET @@tx_isolation = SERIALIZABLE;

SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;

或者通过设置全局隔离级别:

SET @@global.tx_isolation = SERIALIZABLE;

SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;

由任何随后打开的连接继承。在该级别,如果另一个事务已经在进行中,则事务将阻塞任何查询,即。事务已在同一表上发出查询(读或写)。

参见the mysql documentation了解更多详情。

关于MySQL 事务和并发插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16041664/

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