锁定共享模式锁定整个表格

文档:

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锁定了什么?


确保你有a列的索引。 否则,为了评估WHERE a = 0 ,它必须读取表中的每一行,然后在读取每一行时设置一个锁。

ALTER TABLE example ADD INDEX (a);
链接地址: http://www.djcxy.com/p/32835.html

上一篇: LOCK IN SHARE MODE locks entire table

下一篇: SQL Isolation levels or locks in large procedures