mysql锁 锁定范围

辅助索引除了对本身加锁外也会对聚合索引加锁

一、等值辅助索引

1、唯一辅助索引:

             对辅助索引记录上加记录锁

             对其对应的聚合索引加记录锁

2、普通辅助索引:(一共有如下三种情况)

             对SQL语句扫描过的辅助索引记录行加上next-key锁(注意也锁住记录行之后的间隙

             对辅助索引对应的聚合索引加上索引记录锁

             当辅助索引为间隙锁“最小”和“最大”值时,对聚合索引相应的行加间隙锁。“最小”锁定对应聚合索引之后的行间隙。“最大”值锁定对应聚合索引之前的行间隙。

二、范围:

1、唯一辅助索引:

             对于扫描的辅助索引记录的锁定范围就是多个索引记录next-key范围的叠加组合。

             对于聚合索引(主键)的锁定范围,会对多个辅助索引对应的聚合索引列加索引记录锁(不存在的记录不加锁)。

2、普通辅助索引:

            辅助索引锁定范围为此语句扫描索引记录锁定范围的叠加组合。

           当辅助索引为间隙锁“最小”和“最大”值时,对聚合索引相应的行加间隙锁。“最小”锁定对应聚合索引之后的行间隙。“最大”值锁定对应聚合索引之前的行间隙。

 

如果是聚合索引,只会在聚合索引上加锁,并且加锁行为和唯一索引的行为一样。

间隙锁只会阻止insert操作

 

参考文章:https://segmentfault.com/a/1190000013307132

      

 

mysql锁 锁定范围

上一篇:DB2 SELECT FOR UPDATE锁等一则


下一篇:oracle 11g 分区表创建(自动按年、月、日分区)