锁定共享模式锁定整个表格
文档:
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