开两个连接A, B, 分别执行以下三个sql
start transaction; -- 1 SELECT * FROM phpbb3.phpbb_ranks where rank_id=1 for update; -- 2 commit; -- 3
和
start transaction; -- 1 SELECT * FROM phpbb3.phpbb_ranks where rank_id=1; -- 2 SELECT * FROM phpbb3.phpbb_ranks where rank_id=1 for update; -- 3 commit; -- 4
在A执行完1和2后,
B执行1, 正常
B执行2, 立即返回
B执行3, 这时候被阻塞了
A执行3后, B的3立即返回
可以得到的结论: 如果使用了SELECT ... FOR UPDATE, 对其他事务中的SELECT无影响, 但是会阻塞其他事务中的SELECT ... FOR UPDATE