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

时间:2017-12-16 03:49:03

标签: mysql transactions

有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;

第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;

第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创建两个值。

我使用InnoDB引擎和mysql 5.7.17。我认为mysql在某种程度上并不遵守提交顺序。

如何避免这种情况,是否有任何解决方法或配置更改以强制mysql遵守提交顺序?

0 个答案:

没有答案