浅谈MySQL next-key lock 加锁范围
前言
某天,突然被问到 MySQL 的 next-key lock,我瞬间的反应就是:
这都是啥啥啥???
这一个截图我啥也看不出来呀?
仔细一看,好像似曾相识,这不是《MySQL 45 讲》里面的内容么?
什么是 next-key lock
A next-key lock is a combination of a record lock on the index record and a gap lock on the gap before the index record.
官网的解释大概意思就是:next-key 锁是索引记录上的记录锁和索引记录之前的间隙上的间隙锁的组合。
先给自己来一串小问号???
- 在主键、唯一索引、普通索引以及普通字段上加锁,是锁住了哪些索引?
- 不同的查询条件,分别锁住了哪些范围的数据?
- for share 和 for update 等值查询和范围查询的锁范围?
- 当查询的等值不存在时,锁范围是什么?
- 当查询条件分别是主键、唯一索引、普通索引时有什么区别?
既然啥都不懂,那只好从头开始操作实践一把了!
先看看看 《MySQL 45 讲》中丁奇老师的结论:
看了这结论,应该可以解答一大部分问题,不过有一句非常非常重点的话需要关注:MySQL 后面的版本可能会改变加锁策略,所以这个规则只限于截止到现在的最新版本,即 5.x 系列<=5.7.24,8.0 系列 <=8.0.13
所以,以上的规则,对现在的版本并不一定适用,下面我以 MySQL 8.0.25
版本为例,进行多角度验证 next-key lock 加锁范围。
环境准备
MySQL 版本:8.0.25
隔离级别:可重复读(RR)
存储引擎:InnoDB
mysql> select @@global.transaction_isolation,@@transaction_isolationG mysql> show create table tG
您可能感兴趣的文章
- 05-31MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
- 05-31MySQL索引失效十种场景与优化方案
- 05-31MYSQL 高级文本查询之regexp_like和REGEXP详解
- 05-31MySQL获取binlog的开始时间和结束时间(最新方法)
- 05-31MySQL索引查询的具体使用
- 05-31基于MySQL和Redis扣减库存的实践
- 05-31关于MySQL的存储过程与存储函数
- 05-31MySQL实战文章(非常全的基础入门类教程)
- 05-31MySQL Flink Watermark实现事件时间处理的关键技术
- 05-31MySQL Flink实时流处理的核心技术之窗口机制
阅读排行
推荐教程
- 05-30Navicat for MySQL 11注册码激活码汇总
- 05-27Mysql误删数据快速恢复
- 05-31VS2022连接数据库MySQL并进行基本的表的操作指南
- 05-30解决seata不能使用mysql8版本的问题方法
- 05-30MYSQL字符集设置的方法详解(终端的字符集)
- 05-30解决MySQL启动报错:ERROR 2003 (HY000): Can't con
- 05-30关于Mysql-connector-java驱动版本问题总结
- 11-22mac下安装mysql忘记密码的修改方法
- 05-30MySQL中的隐藏列的具体查看
- 11-22mysql exists与not exists实例详解