MySQL锁总结

一:innodb行锁是如何实现:算法

1:innodb的行锁是经过给索引上的索引项加锁来实现的索引

2:经过索引进行数据检索,innodb才会使用行级锁,不然innodb会使用表锁(锁住索引的全部记录)innodb

二:innodb算法之锁(临键锁、间隙锁、记录锁):都是根据innodb存储引擎im

1:临键锁(Next-Key Locks):当SQL执行按照索引进行数据的检索时,且查询条件为范围查询(between 、and、 >、<等),且有数据命中时,该SQL语句加上的行锁为Next-Key Locks数据

具体实现:锁住命中记录区间 + 下一个区间(左开右闭)查询

临键锁以下图所示:db

2:间隙锁(Gap-Lock):范围查询或者是等值查询,且记录不存在,当记录不存在,临键锁退化成GAP锁,且gap锁之间不冲突,img

锁住的范围是左开右开区间co

间隙锁以下图所示:存储引擎

3:记录锁(Record-Lock)

当SQL执行按照惟一性(primary key, unique )索引进行数据的检索时,且查询条件等值匹配且查询的数据命中存在,这时SQL语句加上的锁为记录锁

具体实现:锁住具体索引的索引项

记录锁以下图所示

相关文章
相关标签/搜索