MySQL 后面的版本可能会改变加锁策略,本文只适用版本:

5.x 系列 <=5.7.24
8.0 系列 <=8.0.13

间隙锁在可重复读隔离级别下才有效,以下规则只描述了间隙锁:

原则 1:加锁的基本单位是 next-key lock,next-key lock 是前开后闭区间

原则 2:查找过程中访问到的对象才会加锁。这和锁的普适概念,竞争的资源才会加锁同理

优化 1:索引上的等值查询,给唯一索引加锁的时候,next-key lock 退化为行锁

优化 2:索引上的等值查询,向右遍历时一直走到最后一个值不满足等值条件的时候,next-key lock 退化为间隙锁;

换个描述:索引上的等值查询,会加两个间隙锁,一个是标准的间隙锁左开右闭区间,一个是退化后的间隙锁左开右开区间;最终的效果就是锁住等值这一行、上行开区间、下行开区间

一个 bug:唯一索引上的范围查询会访问到不满足条件的第一个值为止

注意:以上的加锁规则会同时命中多条,也就是会叠加;

next-key lock 和gap锁的加锁效果,注意这只是加锁效果,不是加锁流程和规则:

MySQL-间隙锁-加锁规则相关推荐

  1. 21 间隙锁加锁规则

    间隙锁加锁规则,注意临键锁是间隙锁和行锁的总称,实际上临键锁就是行锁加间隙锁,实际上是先加间隙锁,再加行锁,这两个是分开独立的 两个原则,两个优化,一个bug 熟悉了之后就不需要了,根本 1.加锁基本 ...

  2. MySQL间隙锁详细分析

    什么是间隙锁 间隙锁(Gap Lock):间隙锁是(RR级别下)一个在索引记录之间的间隙上的锁,可以是两个索引记录之间,也可能是第一个索引记录之前或最后一个索引之后的空间 首先要明确,间隙锁是为了防止 ...

  3. 八、Mysql 间隙锁(gap 锁)与慢查询

    Mysql 间隙锁(gap 锁)与慢查询 gap锁与慢查询 gap锁 事务语法 开启事务 事务回滚 事务提交 还原点(演示) 业务设计 逻辑设计 范式设计 查询测试 反范式设计 总结 范式化设计优缺点 ...

  4. MySQL间隙锁(幻读解决原理)

    文章目录 一.间隙锁概念 二.测试间隙锁范围加锁 场景1:用不可重复的主键id测试间隙锁 场景2:用可重复的age(有索引)测试间隙锁 场景3:实际情况需要具体分析用的到底是行锁还是表锁 三.测试等值 ...

  5. Mysql间隙锁实战

    前言 本次实战是基于数据库mysql5.7.14 什么是间隙锁? 间隙锁是对索引记录之间间隙的锁,或者对第一个索引记录之前或最后一个索引记录之后的间隙的锁.例如:SELECT c1 FROM t WH ...

  6. mysql间隙锁 打开_MySQL间隙锁问题

    间隙锁(Gap Lock):锁加在不存在的空闲空间,可以是两个索引记录之间,也可能是第一个索引记录之前或最后一个索引之后的空间. 最近用户反馈说系统老是出现insert时,等待超时了,最后发现是ins ...

  7. mysql间隙锁可重入_关于mysql 间隙锁

    前段时间系统老是出现update死锁,很是纠结.经过排查发现是间隙锁!间隙锁是innodb中行锁的一种, 但是这种锁锁住的却不止一行数据,他锁住的是多行,是一个数据范围.间隙锁的主要作用是为了防止出现 ...

  8. mysql间隙锁触发条件,详解系列文章

    java基础 1.1java的8种基本数据类型装箱拆箱 1.2重写重载封装继承多态 1.3 Stack Queue 1.7 Concurrent包 1.8面向对象 1.9 String StringB ...

  9. 2021字节跳动春招技术面试题:mysql间隙锁触发条件

    java基础 1.1java的8种基本数据类型装箱拆箱 1.2重写重载封装继承多态 1.3 Stack Queue 1.7 Concurrent包 1.8面向对象 1.9 String StringB ...

最新文章

  1. Nginx 入门到实战,新手必懂。
  2. 极光推送maven与代码,无需修改,粘贴即用
  3. java八进制转十六进制_java-十进制、八进制、十六进制数互相转换
  4. 面试突击 002 | Redis 是如何处理已过期元素的?
  5. 泰森怎么会输给道格拉斯_巅峰泰森为何遭遇六连败?日本女孩不是主因,而是这位黑人超模...
  6. 俯瞰大雾弥漫下的鄱阳湖二桥
  7. 华为HCC2014的变与不变
  8. SQL语句备查(引用)
  9. Core 提交返回500 问题 记录 来自网上文章
  10. STM32-实现us延时
  11. 学习笔记——游戏打击感
  12. cocos2dx 3.17海外sdk接入填坑全纪录 Appodeal(广告) SDK 接入(5)
  13. Numpy中take的用法
  14. 如何将PC上的Word文档分享到朋友圈
  15. 网易测试工程师笔经面经(已上岸)
  16. 微信ipad 62 A16登录协议,小程序code 小程序sessionid 获取
  17. BurningStudioPortable刻录CD步骤
  18. 嘘,这份0项目经验应对面试的独门秘籍,千万别被你的面试官发现~
  19. 商用计算机 报价,ASUS - 台式机 - 商用台式电脑配置价格
  20. 计算机主机硬件图片,电脑主机里的各个硬件名称图片用途和使用说明

热门文章

  1. If I Have One Million
  2. eps8266自动重启问题, Soft WDT reset (已解决)
  3. c语言建立可视化窗口,如何用C语言编程出可视化界面?
  4. 算法练习(7) —— 动态规划 Strange Printer
  5. 我们该如何高效的学习?
  6. 自动语音播报WinCC报警消息
  7. HTML/JSP中一些单书名号标签的用途
  8. 国泰煤炭运销管理系统
  9. 用html做个猜字游戏,HTML5 Canvas API制作简单的猜字游戏
  10. Jordan CP3 11 Performance Reviews