介绍

行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。应用在InnoDB存储引擎中。 在InnoDB引擎的数据是基于索引组织的(也就是基于聚集索引来存储的,锁的是聚集索引B+树底部节点的某一个值), 行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。 对于行级锁,主要分为以下三类:

 

什么是幻读: 前面学过这个。一个事务在查询时发现没有对应的数据行,但插入时却发现这行数据已经存在,事务就感觉自己眼花幻象了 什么是间隙: 在B+树的底部叶子节点中,数据和数据之间的间隙,以及叶子和叶子之间的间隙 行锁锁的是什么: 在B+树的底部叶子节点中,一个叶子可能有多个数据(key),行锁锁的是单独一个数据(key),一个key里面存放的就是表的一整行数据

 

1、行锁(Record Lock)也叫记录锁: 锁定个行记录的锁,防止其他事务对此行进行update和delete操作, 在RC、RR隔离级别下都支持

 

2、间隙锁(Gap Lock): 锁定索引记录间隙(不含该记录),确保索引记录间隙不变,防止其他事务在这个间隙进行insert,也就是避免产生幻读 在RR隔离级别下都支持

 

3、临键锁(Next-Key Lock): 行锁和间隙锁的组合,同时锁住数据和数据前面的间隙 在RR隔离级别下都支持

 

RR隔离级别: repeatable read事务隔离级别 RC隔离级别: read commited事务隔离级别 我们在很前面就学过的MySQL的四种隔离级别,可回去看看