例如, SELECT c1 FROM t WHERE c1 BETWEEN 1 AND 6 FOR UPDATE; 锁会阻止其他事务将值2插入 c1的索引记录中,因为该范围内所有现有值之间的间隙都已锁定..., 需要维护对应字段的索引记录, 即需要获取到对应的插入意向锁, 新值并不处于会话1的GAP范围内, 所以value=17可以被更新为value=14...., 分两种情况: 当值存在, 只需要锁住记录本身就可以保证可重复读, 因为存在唯一约束, 所以不需要对记录前后的记录进行间隙锁定; 当值不存在, 需要锁住该记录前后的空隙才能保证不出现幻行
6.使用非聚簇唯一索引的范围查询...不论查询条件的值是否存在
使用非聚簇联合唯一索引的等值查询, 1. 当查询条件为组成联合索引的所有列时, 值存在, 加记录锁; 值不存在, 加间隙锁. 与普通非聚簇唯一索引是一致的. 2....当查询条件只使用部分列但符合最左前缀时, 仍会发生间隙锁定, 不论值是否存在. 3.