:::tips next-key锁 = 行锁+ gap锁 :::
Gap锁
- Gap在read commited或者更低级别的事务下是没有的,所以read commited 与read uncommited无法避免幻读。
- 锁定一个范围,但不包含该记录本身。
- **Gap是左开右闭的
1.Gap锁用在主键索引或者唯一索引的情况
- 如果where条件全部命中, 则不会用Gap锁, 只会加行锁
- 如果where条件部分命中或者全不命中, 则会加Gap锁
2.Gap锁会用在非唯一索引(普通索引)或者不走索引的当前读中
1.非唯一索引的情况
2.不走索引的情况
会对所有gap全部上锁