MySQL 行级锁(行锁、临键锁、间隙锁)

行级锁

行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。应用在InnoDB存储引擎中。
InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁

1.分类

对于行级锁,主要分为以下三类:
1.记录锁存在于包括主键索引在内的唯一索引中,锁定单条索引记录。
2.间隙锁存在于非唯一索引中,锁定开区间范围内的一段间隔,它是基于临键锁实现的。
3.临键锁存在于非唯一索引中,该类型的每条记录的索引上都存在这种锁,它是一种特殊的间隙锁,锁定一段左开右闭的索引区间。

2.间隙锁

MySQL 行级锁(行锁、临键锁、间隙锁)_第1张图片

select * from t where id > 2 and id < 7 for update

间隙锁:(2, 7)区间锁住

2.临键锁

MySQL 行级锁(行锁、临键锁、间隙锁)_第2张图片

select * from t where id > 2 and id < 7 for update

临键锁:(2, 7]区间锁住

可重复读级别下为了解决幻读,MySQL默认就是使用的临键锁,当在非唯一索引下如果SQL没有命中记录则就是间隙锁命中了记录就是临键锁。如果用唯一索引且SQL命中了记录,那么加的就是普通记录锁,否则就是间隙锁

你可能感兴趣的:(JAVA,MYSQL,数据库,java)