当“选择...更新不存在的行”时,我对锁感兴趣;目前,表'test02'中的数据如下:
ID
1
3
8
15
20
列 id 是主键;
当我跑步时:
session1:开始事务;select * from test02 where id = 7 for update;
然后我打开另一个会话,并作为研究员运行:
session2:开始事务;select * from test02 where id = 7 for update;
正如我所料,session2 将等待间隙锁 (3, 8);但是两个会话正常运行。有没有人可以帮助解释为什么 session2 不等待?
但是当我在 session3 中运行以下 sql 时:插入 test02(id) 值 (7); 会话被阻塞,这意味着使用了 session1 中的间隙锁。但我不明白为什么 session2 可以正常运行。
mysql 版本 5.7 和 5.8 都显示相同的结果。