MySQL中的next-key lock

  • next-key lock是啥
  • 有啥用
  • 幻读如何产生

再次推荐一下丁奇的《MySQL实战45讲》,不同阶段阅读该专栏,总能收获不同的感悟。阅读本文,即默认已经知道“当前读”和“快照读”的含义了。

next-key lock是啥

间隙锁(Gap锁)和行锁合称 next-key lock。以该表t为例子:

在MySQL采用innodb,可重复读模式的情况下,执行如下语句:

select * from t for update

此时,for update情况下,select是基于当前读。那么会给该表加上间隙锁,锁住区间:(-⚮,0) (0,5) (5,10) (10,+supremum)

InnoDB 给每个索引加了一个不存在的最大值 supremum

除此之外,还会给该表加上一个行锁,锁住对应的行,综合间隙锁来看,我们可以采用一个左开右闭的区间表示。

(-⚮,0] (0,5] (5,10] (10,+supremum]

行锁 +间隙锁 组成了我们的 next-key lock

有啥用

有人说innodb,可重复读的情况下,还会出现幻读的现象。其实这里涉及到对幻读的一个理解。

  • 可重复读隔离级别下,普通的查询属于快照读,是不会看到别的事务插入的数据的。因此,幻读只有可能在“当前读”下才会出现。
  • 但此种情况亦不能称为幻读。
  • 幻读仅专指“新插入的行”。

也就是说,通过next-key lock, 在innodb,可重复读的情况下,幻读的现象是已经解决的。(感谢间隙锁~)

幻读如何产生

只考虑行锁,不考虑间隙锁,以上图作为待查寻的表,查询结果如图:

  1. sessionA开启一个事务,在第一次查询的情况下结果是(5,5,5)
  2. 但sessionA在第二次查询的时候,缺查出来了3条记录。
  • 首先,针对SessionB的更新操作,由于SessionA的读采用的是当前读,所以结果无可厚非,但这种情况不能算作幻读。(第二部分已经澄清何为幻读)
  • 那么,针对SessionC的新插入记录在SessionA下,被读取到了,此种情况发生了幻读。


考虑间隙锁后,在SeesionA执行如下语句的时候,不仅给记录加上了3个行锁,还加上了4个间隙锁,保证在SessionA提交事务前,不会有新纪录插入进来。

select * from t where b=5 for update

MySQL中的next-key lock相关推荐

  1. mysql中的unique key和null之间的关系

    在mysql 中,唯一约束unique key是为了防止数据重复而设立的.一个表可以有多个唯一约束,但只能有一个主键. 神奇的是,唯一约束竟然可以插入null值,而且可以插入多个null值,这一点令我 ...

  2. MySQL中 ON DUPLICATE KEY UPDATE语法的使用

    MySQL ON DUPLICATE KEY UPDATE 为Mysql特有语法 ON DUPLICATE KEY UPDATE 用法与说明 Mysql中INSERT ... ON DUPLICATE ...

  3. MYSQL中ON DUPLICATE KEY UPDATE对数据进行insertOrUpdate操作

    本文来自:高爽|Coder,原文地址:[url]http://blog.csdn.net/ghsau/article/details/23557915[/url],转载请注明. 向数据库插入记录时,有 ...

  4. php mysql primary key_简单分析MySQL中的primary key功能_MySQL

    在5.1.46中优化器在对primary key的选择上做了一点改动: Performance: While looking for the shortest index for a covering ...

  5. mysql的hash分区_MySQL中hash和key分区值的计算方法

    MySQL中hash和key分区值的计算方法 mysql中有一种叫作key作为partition key的类型.来看看记录是怎么分布的 对于hash 分区,使用%操作符,每个partition key ...

  6. ibatis mysql 同时删多个表报错_MySQL中Multiple primary key defined报错的解决办法

    MySQL中Multiple primary key defined报错的解决办法 创建主键可以有两种方式: create table 表名( 字段名 类型, 字段名 类型, -- primary k ...

  7. Mysql中key 、primary key 、unique key 与index区别

    https://www.cnblogs.com/zjfjava/p/6922494.html 索引被用来快速找出在一个列上用一特定值的行.没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表 ...

  8. 基础回顾(四)在mysql中的mul

    在mysql中mul是Key,而key是键的意思,key分为主键primary key,外键FOREIGN KEY以及一般键,当Key是MUL时,那么该列的值可以重复,并且该列是一个非唯一索引的前导列 ...

  9. oracle中key,mysql中的key在oracle中是什么

    mysql中的key在oracle中是什么 说明一下.key在oracle中对应的是什么? 比如说: CREATE TABLE `AdBanner` ( `BannerId` int(8) NOT N ...

  10. Mysql中Key与Index的区别

    mysql的key和index多少有点令人迷惑,这实际上考察对数据库体系结构的了解的. 1 key 是数据库的物理结构,它包含两层意义,一是约束(偏重于约束和规范数据库的结构完整性),二是索引(辅助查 ...

最新文章

  1. 2017icpc沈阳 G Infinite Fraction Path BFS+剪枝
  2. 昆仑通态9针通讯口定义_MCGS昆仑通态触摸屏常见问题(4)
  3. 802.11ac标准简介
  4. C4.5中对于离散和连续特征的判定
  5. Spring Boot 统一结果封装
  6. 发布软件之前,怎样告诉用户怎么用
  7. js文章QQ空间分享
  8. 转载---Adaboost学习记录
  9. 360互联网技术训练营第七期 -“遇见”PIKA
  10. 【车间调度】基于matlab粒子群算法求解生产调度问题【含Matlab源码 485期】
  11. java ssm商城_SSM网上购物商城系统
  12. 校园网接无线路由器多账号登录
  13. 平板电脑也可以学python吗?10 个Python 编辑器,,让编程更贴近生活~
  14. 免费网站建设应该要掌握哪些?
  15. 正则表达式-re.error: unbalanced parenthesis at position 7
  16. 概率论与数理统计 期末突击复习
  17. Android Studio调用高德地图api
  18. iOS开发雕虫小技之傻瓜式定位神器-超简单方式解决iOS后台定时定位
  19. 富文本编辑器mavon-editor文章回显
  20. 光标飞控硬件架构设计与原理

热门文章

  1. 微信分享链接,图片不显示
  2. 专家不靠谱,秘笈才重要
  3. 大数据24小时:腾讯云在美新增两个数据中心,依图科技与华为合作发布人工智能一体机
  4. 云原生服务网格 Istio 1.4 部署指南
  5. vmware workstation 未能启动vmware
  6. 有个空间,名叫 Gamma
  7. 抖音 快手 皮皮虾 短视频一次解析
  8. WLAN中的MIMO技术详解
  9. 免费的chk恢复工具
  10. 通过此方法可以揭秘iPhone与其他蓝牙产品的交互流程啦,iPhone蓝牙HCI log的抓取方式详解