【发布时间】:2020-07-15 04:13:14
【问题描述】:
当“选择...更新不存在的行”时,我对锁感兴趣; 目前,'test02'表中的数据如下:
身份证
1
3
8
15
20
列id为主键;
当我跑步时:
会话 1: 开始交易; select * from test02 where id = 7 for update;
然后我打开另一个会话,并作为伙伴运行:
会话2: 开始交易; select * from test02 where id = 7 for update;
正如我所料,session2 将等待间隙锁 (3, 8);但是两个会话正常运行。有没有人可以帮助解释为什么 session2 不等待?
但是当我在 session3 中运行以下 sql 时:插入 test02(id) 值 (7);会话被阻塞,这意味着使用了 session1 中的间隙锁。但是我不明白为什么session2可以正常运行。
mysql 5.7 和 5.8 都显示相同的结果。
【问题讨论】:
-
但是当我在 session3 中运行以下 sql 时:插入 test02(id) 值 (7);会话被阻塞,这意味着使用了 session1 中的间隙锁。但我不明白 session2 在哪里可以正常运行。
-
请编辑您的问题以包含您在上面的评论。该评论与问题本身相关,可能会被前来回答的人忽略。