三、行级锁

行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。应用在InnoDB存储引擎中。
InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁

对于行级锁,主要分为以下三类:
1. 行锁(Record Lock):锁定单个行记录的锁,防止其他事务对此行进行update和delete。在RC、RR隔离级别下都支持。
2. 间隙锁(Gap Lock):锁定索引记录间隙(不含该记录),确保索引记录间隙不变,防止其他事务在这个间隙进行insert,产生幻读。在RR隔离级别下都支持。
3. 临键锁(Next-Key Lock):行锁和间隙锁组合,同时锁住数据,并锁住数据前面的间隙Gap。在RR隔离级别下支持。

1、行锁

InnoDB实现了以下两种类型的行锁:

  1. 共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排它锁。
  2. 排他锁(X):允许获取排他锁的事务更新数据,阻止其他事务获得相同数据集的共享锁和排他锁。


演示

默认情况下,InnoDB在 REPEATABLE READ事务隔离级别运行,InnoDB使用 next-key 锁进行搜索和索引扫描,以防止幻读。

  1. 针对唯一索引进行检索时,对已存在的记录进行等值匹配时,将会自动优化为行锁。

case1:select正常
case2:select…lock in share mode

case3:共享锁和排他锁
case4:排他锁和排他锁

2. InnoDB的行锁是针对于索引加的锁,不通过索引条件检索数据,那么InnoDB将对表中的所有记录加锁,此时 就会升级为表锁。

查看意向锁及行锁:select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from performance_schema.data_locks;

2、间隙锁/临键锁

默认情况下,InnoDB在 REPEATABLE READ事务隔离级别运行,InnoDB使用 next-key 锁进行搜索和索引扫描,以防止幻读。

  1. 索引上的等值查询(唯一索引),给不存在的记录加锁时, 优化为间隙锁 。
  2. 索引上的等值查询(普通索引),向右遍历时最后一个值不满足查询需求时,next-key lock 退化为间隙锁。
  3. 索引上的范围查询(唯一索引)–会访问到不满足条件的第一个值为止。

注意:间隙锁唯一目的是防止其他事务插入间隙。间隙锁可以共存,一个事务采用的间隙锁不会阻止另一个事务在同一间隙上采用间隙锁。

MySQL 行级锁(行锁、临键锁、间隙锁)相关推荐

  1. CSS块级、行级、行级块标签、display、div、span

    文章目录 块级标签 行级标签 行级块标签 display div 和span 块级标签 无论内容有多少,都会占据一行; 默认宽:与父级标签一致; 默认高:0 :或者与内容高度一致. 但是可以通过 wi ...

  2. MySQL中MVCC+行级锁的工作机制(源码佐证)

    转自:https://blog.csdn.net/Waves___/article/details/105295060 序 最近在学习MySQL中的MVCC,看了网上的各种版本,什么创建版本号.删除版 ...

  3. mysql 表级别的锁和行级别的_MySQL 表锁和行锁机制

    案例分析 目前,MySQL常用的存储引擎是InnoDB,相对于MyISAM而言.InnoDB更适合高并发场景,同时也支持事务处理.我们通过下面这个案例(坑),来了解行锁和表锁. 业务:因为订单重复导入 ...

  4. 【MySQL | 进阶篇】07、全局锁、表级锁、行级锁

    目录 一.概述 二.全局锁 2.1 介绍 A. 我们一起先来分析一下不加全局锁,可能存在的问题. B. 再来分析一下加了全局锁后的情况 2.2 语法 1). 加全局锁 2). 数据备份 3). 释放锁 ...

  5. 就这一次,带你彻底搞清 MySQL行级锁的加锁规则

    大家好,我是小林. 是不是很多人都对 MySQL 加行级锁的规则搞的迷迷糊糊,一会是 next-key 锁,一会是间隙锁,一会又是记录锁. 坦白说,确实还挺复杂的,但是好在我找点了点规律,也知道如何如 ...

  6. 2 万字 + 30 张图搞懂 MySQL 的行级锁!

    不是很多人都对 MySQL 加行级锁的规则搞的迷迷糊糊,对记录一会加的是 next-key 锁,一会加是间隙锁,一会又是记录锁. 坦白说,确实还挺复杂的,但是好在我找点了点规律,也知道如何如何用命令分 ...

  7. Mysql里的锁(排它锁、共享锁、行锁、表锁、间隙锁、临键锁、意向锁)

    一.加锁的目的是什么? 在我们了解数据库锁之前,首先我们必须要明白加锁的目的是为了解决什么问题,如果你还不清楚的话,那么从现在起你应该知道,数据库的锁是为了解决事务的隔离性问题,为了让事务之间相互不影 ...

  8. mysql某个表被行锁了_MySQL中的锁(表锁、行锁)

    锁是计算机协调多个进程或纯线程并发访问某一资源的机制.在数据库中,除传统的计算资源(CPU.RAM.I/O)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所在有数 ...

  9. mysql的锁机制(读锁,写锁,表锁,行锁,悲观锁,乐观锁,间隙锁)

    读锁和写锁 介绍 MyISAM表锁中的读锁和写锁 读锁(共享锁S): 对同一个数据,多个读操作可以同时进行,互不干扰.加锁的会话只能对此表进行读操作,其他会话也只能进行读操作.MyISAM的读默认是加 ...

  10. 5.MySQL行锁、表锁、间隙锁详解

    一.表锁 表锁不依赖于储存引擎(不管你是MySQL的什么存储引擎,对于表锁的策略都是一样的),开销小(因为力度大).表锁不会产生死锁问题,但是表锁会影响并发率.  表锁不依赖索引,当索引失效的时候,行 ...

最新文章

  1. Clubhouse 本土化之后干得过“顶流”抖音快手吗? | 极客视频
  2. echarts入门基础,画折线图
  3. java try 返回值_JAVA的try... catch finally的return返回值问题
  4. Qt新添加的类无法链接
  5. 2345电脑管家_PS教程第一节:如何正确安装PScc?安装前做好这一步电脑才不会卡顿....
  6. 测试总结(部分)---转载
  7. python 怎么把 写好的代码 放到服务器执行_给 Python 初学者解答了无数遍的 Python 环境相关问题...
  8. 汇编语言 王爽 第四版 实验4
  9. 怎么把索尼摄像机拍摄的RSV文件修复转换为MXF视频
  10. Snake模型综合介绍
  11. win10创建局域网服务器
  12. 你负债了吗? 聊聊“去杠杆”!
  13. CentOS7 快速搭建VNC Server 实现服务器远程控制台访问(Java Viewer)
  14. Topic ods_base_db not present in metadata after 60000 ms.
  15. Linux下Socket编程之UDP原理
  16. Java开发者跳槽必备,面试:Redis为什么这么快呢
  17. UML之父Ivar Jacobson:软件工程需要重建基础
  18. C语言实现超长整数减法
  19. golang-泛型基础篇(一)
  20. 论文解读:精华内容——用于常识推理的知识生成提示

热门文章

  1. 接入微信提现Api(企业付款到零钱--向微信用户个人付款)
  2. React+Echarts 实时数据监控刷新
  3. NeHe OpenGL系列教程(中英文版附带VC++源码)中英文系列
  4. PHP剧影评系统的设计与实现毕业设计源码140859
  5. 爬取网易严选某种衣服商品数据,实现可视化,结论有点吓人
  6. LogSeq 表格合并单元格
  7. 计算机资源管理器出问题怎么办,电脑资源管理器运行异常导致任务栏出现问题...
  8. 如何在一周内快速摸清一个行业?
  9. 2021年又一深圳程序员猝死,7大信号助你提前预警《打工人的那些事》
  10. 数学模型 Lotka-Volterra