如果存在索引
username(应该是索引,如果没有,则添加一个,最好是
UNIQUE一个),那么发出a
SELECt * FROMuser_table WHERe username = 'foo' FORUPDATE;将阻止任何并发事务创建该用户(以及“上一个”和“下一个”索引不唯一时的可能值)。
如果找不到 合适的 索引(满足
WHERe条件),则不可能进行有效的记录锁定,并且整个表都将被锁定*。
该锁将一直保持到发出的交易结束
SELECT ... FOR UPDATE。
在这些手册页中可以找到关于此主题的一些非常有趣的信息。
- 我说有 效率,因为实际上记录锁定实际上是对索引记录的锁定。如果找不到 合适的 索引,则只能使用默认的聚集索引,并且它将被完全锁定。



