mysql中行锁、间隙锁以及next-key lock 是什么?为了解决什么问题?

1、行锁:

我们知道myisam默认是表锁,锁的粒度较大,因此适用读多写少的场景。在innodb中默认是行锁,每次增删改一行数据,会将该行锁住。后续的线程操作改行数据会被阻塞,直到持有行锁的线程释放锁。

2、间隙锁:

间隙锁的出现是为了在innodb的可重复读隔离级别下,解决幻读问题产生的。间隙锁会封锁该条记录相邻两个键之间的空白区域,防止其它事务在这个区域内插入、修改、删除数据;所谓间隙是将数据分为不同区间,对该区间范围进行加锁,区间的规则为左开右闭,比如当数据为1,3,5时,对应的区间为(-∞,1],(1,3],(3,5],(5,+∞];

对于操作的数据是主键索引和普通索引,有不同的加锁规则,如下:

1)、唯一索引只有锁住多条记录或者一条不存在的记录的时候,才会产生间隙锁,指定给某条存在的记录加锁的时候,只会加记录锁,不会产生间隙锁;
2)、普通索引不管是锁住单条,还是多条记录,都会产生间隙锁;

3、next-key lock

行锁+间隙锁就组成了next—key lock,innodb在可重复度隔离级别下,采用next-key lock来防止幻读,因此实现了最高的隔离级别。

参考:

MYSQL(04)-间隙锁详解

MySql是如何解决幻读的?

mysql的锁机制 - 记录锁、间隙锁、临键锁 - 咖啡屋小罗的文章 - 知乎

另外:关于我的个人博客网站.,欢迎访问

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值