gpt4 book ai didi

mysql - Mysql事务提交是不是按顺序?

转载 作者:可可西里 更新时间:2023-11-01 08:59:56 45 4
gpt4 key购买 nike

共有3个并发mysql会话。2个写入table1,1个读取table1。所有这3个会话在执行事务之前都引用了一个唯一的锁,它用于被授予没有人将同时读/写表1的权限。
会议1

START TRANSACTION
SELECT id FROM global_lock WHERE id=1 FOR UPDATE;
t1 = GetCurrentTimeMills() // used psuedo code here
INSERT INTO table1 (value, updated) VALUES ('v1', t1);
COMMIT;

会议2
START TRANSACTION
SELECT id FROM global_lock WHERE id=1 FOR UPDATE;
t2 = GetCurrentTimeMills() // used pseudo code here
INSERT INTO table1 (value, updated) VALUES ('v2', t2);
COMMIT;

第三节
START TRANSACTION
SELECT id FROM global_lock WHERE id=1 FOR UPDATE;
SELECT * FROM table1 WHERE updated> t1 -1;
COMMIT;

会话3只返回在t2创建的值。它缺少在T1创建的值,该值早于T2。
如果我第二次执行会话3,我将得到在t1和t2创建的值。
我使用的是InnoDB引擎和MySQL5.7.17。我假设mysql在某种程度上不遵守提交顺序。
如何避免这种情况,是否有任何解决方法或配置更改来强制mysql遵守提交顺序?

最佳答案

这三笔交易表现正常。
mysql innodb隔离级别和锁有复杂的语义,不容易调试。您可能希望在开始事务之前获取外部锁。考虑使用https://linux.die.net/man/1/flock(或:brew install flock)。

关于mysql - Mysql事务提交是不是按顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47842350/

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