唯一索引范围查询锁 bug修复了
其他资料介绍入下:
session A 是一个范围查询,按照原则 1 的话,应该是索引 id 上只加 (10,15] 这个 next-key lock ,并且因 为 id 是唯一键,所以循环判断到 id=15 这一行就应该停止了。
但是实现上, InnoDB 会往前扫描到第一个不满足条件的行为止,也就是 id=20 。而且由于这是个范围扫 描,因此索引 id 上的 (15,20] 这个 next-key lock 也会被锁上。照理说,这里锁住 id=20 这一行的行为,其 实是没有必要的。因为扫描到 id=15 ,就可以确定不用往后再找了。
验证
版本 8.0.24
数据准备
col1 加了普通索引
开始验证
按照上述资料锁住范围是 (10,20]
其实值锁住了(10,15]
在15 到20之间插入数据成功 说明并没有锁住 (15,20]
插入 14时 发生阻塞
进行update 语句验证时 只锁住了 15 这一条记录
结论:唯一索引范围查询锁 bug修复了,唯一索引范围查询时,插入时是间隙锁,查询时是行索。