做
SELECT COUNT(*) FROM parent WHERE NAME = 'Jones' LOCK IN SHARE MODE;
以相同的方式锁定行
SELECT * FROM parent WHERE NAME = 'Jones' LOCK IN SHARE MODE;
最佳答案
lock in share mode
的文档指定:SELECT ... LOCK IN SHARE MODE
在任何行上设置共享模式锁
已经读过了。其他会话可以读取行,但不能修改
直到你的交易完成。如果这些行中的任何一行被更改
通过另一个尚未提交的事务,查询将等待
直到事务结束,然后使用最新值。
这将基于事务读取的行。这两个查询通常读取相同的行。
但是,如果parent(name)
上有索引,则查询是不等价的。count(*)
查询只需使用索引就可以解决这个问题,而select *
则需要读取数据页。我假设MySQL会在仅索引查询期间锁定底层行,但我不能百分之百确定。
关于mysql - LOCK IN SHARE MODE是否可以与COUNT一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28658924/