来自 MySQL 词汇表:
阅读已提交
当具有此隔离级别的事务执行 UPDATE ... WHERE 或 DELETE ... WHERE 操作时,其他事务可能必须等待。该事务可以执行 SELECT ... FOR UPDATE 和 LOCK IN SHARE MODE 操作,而无需让其他事务等待。
那是对的吗?
UPDATE 为它扫描的每一行设置 x 锁,然后释放那些与 WHERE 部分不匹配的锁。剩余的行保持 x 锁直到事务结束。据我所知,SELECT-FOR UPDATE 会发生完全相同的事情。那么 UPDATE 怎么会阻塞其他事务而 SELECT-FOR UPDATE 不会呢?