LOCK IN SHARE MODE锁定整个表格

时间:2016-05-27 22:37:47

标签: mysql concurrency locking row innodb

Documentation

  

SELECT ... LOCK IN SHARE MODE在读取的所有行上设置共享模式锁。其他会话可以读取行,但在事务提交之前无法修改它们。如果这些行中的任何行已被另一个尚未提交的事务更改,则查询将等待该事务结束,然后使用最新值。

然而,一些实验表明它锁定的次数多于读取的行数。

CREATE TABLE example (a int);
START TRANSACTION;
SELECT a FROM example WHERE a = 0 LOCK IN SHARE MODE;

然后是另一个连接

INSERT INTO example VALUES (1);

锁上的后续连接阻止。

LOCK IN SHARE MODE似乎锁定了超过"任何读取的行"。

确实LOCK IN SHARE MODE锁定了什么?

1 个答案:

答案 0 :(得分:2)

确保WHERE a = 0列上有索引。否则,为了评估ALTER TABLE example ADD INDEX (a); ,它必须读取表中的每一行,然后在读取每行时设置一个锁。

A