登录
首页 >  数据库 >  MySQL

InnoDB三种类型锁

来源:SegmentFault

时间:2023-01-27 14:14:09 141浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是数据库学习者,那么本文《InnoDB三种类型锁》就很适合你!本篇内容主要包括InnoDB三种类型锁,希望对大家的知识积累有所帮助,助力实战开发!

行锁的三种算法

  • Record Lock:单个记录上的锁
  • Gap Lock:间隙锁,锁定一个范围,但不包含记录本身
  • Next-Key Lock:Gap Lock+Record Lock,锁定一个范围,并且锁定记录本身。

采用Next-Key Lock的锁定技术称为Next-Key Locking。它是为了解决幻读,如果一个索引有10,11,13,20这几个值,采用Next-Key Locking后,上锁的区间为:
(-∞,10)
[10,11)
[11,13)
[13,20)
[20,+∞)

我们来看下Next-Key Lock在列为唯一索引与辅助索引下的不同表现形式,先看唯一索引:
如果列是唯一索引,Next-Key Lock会被优化,并降级为Record Lock,也就是仅锁住索引本身而不是范围。

如果是辅助索引就需要好好分析下了,我们看下面的示例:

create table z(a int,b int,primary key(a),key(b));
insert into z select 1,1;
insert into z select 3,1;
insert into z select 5,3;
insert into z select 7,6;
insert into z select 10,8;

表有两列,a为唯一索引,b为辅助索引。接下来执行下面sql:

select * from z where a=5 lock in share mode;
insert into z select 4,2;
insert into z select 6,5;

分析:
因为a=5上已经加了行锁,所有第一条SQL会阻塞;
因为2,5都在(1,3)与(3,6)范围里,所以第二条与第三条同样会被阻塞。

在REPEATABLE READ下,InnoDB采用next-key locking机制来避免幻读问题。

好了,本文到此结束,带大家了解了《InnoDB三种类型锁》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多数据库知识!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表