在共享模式下使用锁定时,为什么所选数据会丢失某些行?

时间:2015-04-20 08:24:40

标签: mysql sql transactions locking

我有一张桌子A:

create table A(id int(11) auto_increment primary key, name varchar(255));

和 我有很多线程正在同时执行以下两个事务:

TRANSACTION 1:
SELECT id, name FROM A (SQL1)
SELECT id, name FROM A WHERE id > ? LOCK IN SHARE MODE (SQL2) 

TRANSACTION 2:
INSERT INTO A(name) VALUES (?) (SQL3)

我找到了一个停滞不前的东西:

  

有时,并非总是如此,SQL2的结果会遗漏某些行

例如:

SQL1的结果是:

(1, "a")
(2, "b")
(3, "c")

但SQL2的结果是:

(1, "a")
(2, "b")

它看不到(3," c"),没有其他SQL可以删除表格的行;

为什么?

我的mysqld版本是5.6.22,引擎是InnoDB

0 个答案:

没有答案