Mysql事务提交是不是按顺序?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql事务提交是不是按顺序?相关的知识,希望对你有一定的参考价值。
有3个并发的mysql会话.2写入table1,一个读取table1。所有3个会话在执行事务之前引用一个唯一的锁,这用于授予没有人同时读/写table1
第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;
第二节
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;
第3节
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处创建两个值。
我正在使用带有mysql 5.7.17的InnoDB引擎。我假设mysql在某种程度上不遵守提交顺序。
如何避免这种情况,是否有任何解决方法或配置更改以强制mysql遵守提交顺序?
答案
这三个交易行为正确。
Mysql innodb隔离级别和锁具有复杂的语义,并不总是易于调试。在开始交易之前,您可能更愿意获得外部锁定。考虑使用https://linux.die.net/man/1/flock(或:brew install flock)。
以上是关于Mysql事务提交是不是按顺序?的主要内容,如果未能解决你的问题,请参考以下文章