mysql 行锁,间隙锁,临键锁

发布时间 2023-10-11 09:04:58作者: -韩

mysql中的行锁,临键锁,间隙锁都是为了解决innodb引擎下事务隔离级别的一系列排他锁

行锁: 也称为记录锁,当我们对mysql表中的某一条记录,或者唯一索引加锁的时候,innodb会默认对这一行记录进行加锁,避免其他事务对其进行修改

间隙所:顾名思义,就是锁定一个索引的区间,在普通索引或者唯一索引列上,由于索引是基于b+树的一个结构存储,默认会存储在一个索引的一个区间,就是事务对索引列进行加锁的时候,默认锁定索引左右开区间的一个范围,在进行索引的范围查询中,无论是否是唯一索引,都会触发一个间隙锁,比如基于beewttn范围查询过程中,就会产生一个左右开区间的间隙锁。

临键锁:相当于行锁+间隙锁的一个组合,他的锁定范围既包含的索引记录,也包含了索引区间,会锁定一个左开右闭的一个区间范围

 

三种锁表示的来说,就是锁定数据的一个范围,是为了解决幻读的这个一个问题,而临键锁,打我们使用一个非唯一索引的时候,他不仅会锁定这行记录还会锁定这个记录对应的左开右闭区间,因此在实际

使用过程中,尽量使用唯一索引或者主键索引,避免造成大面积的锁定造成性能的一个影响