InnoDB可重复读隔离级别下如何避免幻读
表象:快照读(阻塞读)-伪MVCC
内在:next-key锁(行锁+gap锁)
Gap锁
如果where条件全部命中,则不会用gap锁,只会加记录锁
如果where条件部分命中或者全不命中,则会加gap锁
唯一索引查询结果全部命中,不加gap锁
非唯一索引,如上图所示:间隙gap共有
(-∞,3] (3,5] (5,7] (7,9] (9,21] (21,∞)
(7,9] (9,21] 为gap锁,即(7~21]都无法插入
//官方示例如下
(negative infinity, 10]
(10,11]
(11,13]
(13,20]
(20,positive infinity)
不走索引时会全部上gap
死锁
https://www.cnblogs.com/LBSer/p/5183300.html