辅助索引除了对本身加锁外也会对聚合索引加锁
一、等值辅助索引
1、唯一辅助索引:
对辅助索引记录上加记录锁
对其对应的聚合索引加记录锁
2、普通辅助索引:(一共有如下三种情况)
对SQL语句扫描过的辅助索引记录行加上next-key锁(注意也锁住记录行之后的间隙)
对辅助索引对应的聚合索引加上索引记录锁
当辅助索引为间隙锁“最小”和“最大”值时,对聚合索引相应的行加间隙锁。“最小”锁定对应聚合索引之后的行间隙。“最大”值锁定对应聚合索引之前的行间隙。
二、范围:
1、唯一辅助索引:
对于扫描的辅助索引记录的锁定范围就是多个索引记录next-key范围的叠加组合。
对于聚合索引(主键)的锁定范围,会对多个辅助索引对应的聚合索引列加索引记录锁(不存在的记录不加锁)。
2、普通辅助索引:
辅助索引锁定范围为此语句扫描索引记录锁定范围的叠加组合。
当辅助索引为间隙锁“最小”和“最大”值时,对聚合索引相应的行加间隙锁。“最小”锁定对应聚合索引之后的行间隙。“最大”值锁定对应聚合索引之前的行间隙。
如果是聚合索引,只会在聚合索引上加锁,并且加锁行为和唯一索引的行为一样。
间隙锁只会阻止insert操作
参考文章:https://segmentfault.com/a/1190000013307132