:::tips next-key锁 = 行锁+ gap锁 :::

Gap锁

  • Gap在read commited或者更低级别的事务下是没有的,所以read commited 与read uncommited无法避免幻读。
  • 锁定一个范围,但不包含该记录本身。
  • **Gap是左开右闭的

**

1.Gap锁用在主键索引或者唯一索引的情况

  • 如果where条件全部命中, 则不会用Gap锁, 只会加行锁

image.png

  • 如果where条件部分命中或者全不命中, 则会加Gap锁

2.Gap锁会用在非唯一索引(普通索引)或者不走索引的当前读中

1.非唯一索引的情况

image.png

2.不走索引的情况

会对所有gap全部上锁
image.png