接下来,我们看看查询的值不存在的情况直接看案例:会话 1 加锁变化过程如下: 先会对普通索引 b 加上 next-key lock,范围是(8,16];但是由于查询的记录是不存在的,所以不会再额外加个间隙锁,但是 next-key lock 会退化为间隙锁,最终加锁范围是 (8,16)。 会话 2 因为往间隙锁里插入了 b = 9 的记录,所以会被锁住,而 b = 16 是没有被加锁的,因此会话 3 的语句可以正常执行。