确实
SELECT COUNT(*) FROM parent WHERE NAME = 'Jones' LOCK IN SHARE MODE;
以与
相同的方式锁定行SELECT * FROM parent WHERE NAME = 'Jones' LOCK IN SHARE MODE;
答案 0 :(得分:2)
lock in share mode
的文档指定:
SELECT ... LOCK IN SHARE MODE
在任何行上设置共享模式锁定 这是读。其他会话可以读取行,但不能修改 他们直到你的交易提交。如果这些行中的任何一行被更改 通过另一个尚未提交的事务,您的查询将等待 直到该交易结束,然后使用最新的值。
这将基于事务读取的行。这两个查询通常会读取相同的行。
但是,如果parent(name)
上有索引,则查询不等效。 count(*)
查询只能使用索引来解决此问题,而select *
则需要读取数据页。我假设MySQL会在仅索引查询期间锁定底层行,但我不是100%肯定。