讨论数量:
等值查询:针对非唯一索引等值查询,查询的记录不存在,则加 next-key lock,但会退化为Gap Lock间隙锁,即只会加一把锁。
1.加锁查询rank=26的记录,先会对普通索引 rank 加上 next-key lock,范围是(24,32]
2.由于查询的记录不存在,所以不会再额外加个间隙锁,但next-key lock 会退化为间隙锁,最终加锁范围是 (24,32)
针对上区间边界值24,如果新插入的数据rank值也是24,则其插入的主键id必须小于rank=24所对应的id值 2,也就是说 主键id<2 的可以插入, 否则插入失败。你如果插入时id使用的是自增id,那id肯定是大于2的,所以插入失败
同理,针对下区间边界值32,如果新插入的数据rank值也是32,则其插入的主键id必须大于rank=32所对应的id值 4,也就是说 主键>4 的可以插入, 否则插入失败。你如果插入时id使用的是自增id,那id肯定是大于4的,所以插入成功
根本原因是查询的记录不存在。详细参考:blog.csdn.net/w15558056319/article...
等值查询:针对非唯一索引等值查询,查询的记录不存在,则加 next-key lock,但会退化为Gap Lock间隙锁,即只会加一把锁。
1.加锁查询rank=26的记录,先会对普通索引 rank 加上 next-key lock,范围是(24,32]
2.由于查询的记录不存在,所以不会再额外加个间隙锁,但next-key lock 会退化为间隙锁,最终加锁范围是 (24,32)
针对上区间边界值24,如果新插入的数据rank值也是24,则其插入的主键id必须小于rank=24所对应的id值 2,也就是说 主键id<2 的可以插入, 否则插入失败。你如果插入时id使用的是自增id,那id肯定是大于2的,所以插入失败
同理,针对下区间边界值32,如果新插入的数据rank值也是32,则其插入的主键id必须大于rank=32所对应的id值 4,也就是说 主键>4 的可以插入, 否则插入失败。你如果插入时id使用的是自增id,那id肯定是大于4的,所以插入成功
根本原因是查询的记录不存在。详细参考:blog.csdn.net/w15558056319/article...