LOCK IN SHARE MODE是否与COUNT一起使用

时间:2015-02-22 14:25:59

标签: mysql

确实

SELECT COUNT(*) FROM parent WHERE NAME = 'Jones' LOCK IN SHARE MODE;

以与

相同的方式锁定行
SELECT * FROM parent WHERE NAME = 'Jones' LOCK IN SHARE MODE;

1 个答案:

答案 0 :(得分:2)

lock in share mode的文档指定:

  

SELECT ... LOCK IN SHARE MODE在任何行上设置共享模式锁定   这是读。其他会话可以读取行,但不能修改   他们直到你的交易提交。如果这些行中的任何一行被更改   通过另一个尚未提交的事务,您的查询将等待   直到该交易结束,然后使用最新的值。

这将基于事务读取的行。这两个查询通常会读取相同的行。

但是,如果parent(name)上有索引,则查询不等效。 count(*)查询只能使用索引来解决此问题,而select *则需要读取数据页。我假设MySQL会在仅索引查询期间锁定底层行,但我不是100%肯定。