允许冲突间隙锁的原因是,如果从索引中清除记录,则必须合并不同事务在记录上持有的间隙锁。
InnoDB间隙锁定是"纯粹的抑制性",这意味着它们的唯一目的是防止其他事务插入到间隙中....如果能插入数据, 则插入后, 索引顺序是这样的: 3,626, 17,514, 17,515,42,880, 但因为17,514的next指针已经被锁(间隙被锁), 所以这条sql会被阻塞
INSERT..., 则插入后, 索引顺序是这样的: 3,626, 17,513, 17,514,42,880, 新记录索引处于17,514之前, 所以不会被阻塞
INSERT INTO `user`(`id`, `name...value = 16 where id = 514
因为间隙锁锁住的是索引记录中的空隙, 间隙并没有确切的前后区间, innodb将新值插入索引记录时, 需要维护对应字段的索引记录, 即需要获取到对应的插入意向锁...也就是, 当等值查询时, InnoDB会对值前后的间隙加锁, 如果存在记录, 则加上记录锁
4.使用普通非聚簇索引的范围查询
a) 左右都是开区间, 且左右范围不存在记录
start transaction