image.png

    退化成记录锁 - 图2
    会话1加锁变化过程如下:

    1. 加锁的基本单位是 next-key lock,因此会话1的加锁范围是(8, 16];
    2. 但是由于是用唯一索引进行等值查询,且查询的记录存在,所以 next-key lock 退化成记录锁,因此最终加锁的范围是 id = 16 这一行

    所以,会话 2 在修改 id=16 的记录时会被锁住,而会话 3 插入 id=9 的记录可以被正常执行。