Mysql InnoDB行锁深入理解

Record Lock记录锁

Record Lock 称为记录锁,锁住的是一条记录。而且记录锁是有 S 锁和 X 锁之分的:

  • 当一个事务对一条记录加了 S 型记录锁后,其他事务也可以继续对该记录加 S 型记录锁(S 型与 S 锁兼容),但是不可以对该记录加 X 型记录锁(S 型与 X 锁不兼容);
  • 当一个事务对一条记录加了 X 型记录锁后,其他事务既不可以对该记录加 S 型记录锁(S 型与 X 锁不兼容),也不可以对该记录加 X 型记录锁(X 型与 X 锁不兼容)。

当一个事务执行了当前读

select * from t_test where id = 1 for update;

就是对 t_test 表中主键 id 为 1 的这条记录加上 X 型的记录锁,这样其他事务就无法对这条记录进行修改了。

当事务执行 commit 后,事务过程中生成的锁都会被释放。

Gap Lock 间隙锁

Gap Lock 称为间隙锁,只存在于可重复读隔离级别,目的是为了解决可重复读隔离级别下幻读的现象。

假设,表中有一个范围 id 为(3,5)间隙锁,那么其他事务就无法插入 id = 4 这条记录了,这样就有效的防止幻读现象的发生。

间隙锁虽然存在 X 型间隙锁和 S 型间隙锁,但是并没有什么区别,间隙锁之间是兼容的,即两个事务可以同时持有包含共同间隙范围的间隙锁,并不存在互斥关系,因为间隙锁的目的是防止插入幻影记录而提出的

Next-Key Lock 临键锁

Next-Key Lock 称为临键锁,是 Record Lock + Gap Lock 的组合,锁定一个范围,并且锁定记录本身。

假设,表中有一个范围 id 为(3,5] 的 next-key lock,那么其他事务即不能插入 id = 4 记录,也不能修改 id = 5 这条记录。

所以,next-key lock 即能保护该记录,又能阻止其他事务将新纪录插入到被保护记录前面的间隙中。

next-key lock 是包含间隙锁+记录锁的,如果一个事务获取了 X 型的 next-key lock,那么另外一个事务在获取相同范围的 X 型的 next-key lock 时,是会被阻塞的

比如,一个事务持有了范围为 (1, 10] 的 X 型的 next-key lock,那么另外一个事务在获取相同范围的 X 型的 next-key lock 时,就会被阻塞。

虽然相同范围的间隙锁是多个事务相互兼容的,但对于记录锁,我们是要考虑 X 型与 S 型关系,X 型的记录锁与 X 型的记录锁是冲突的

插入意向锁(特殊的间隙锁)

一个事务在插入一条记录的时候,需要判断插入位置是否已被其他事务加了间隙锁(next-key lock 也包含间隙锁)。

如果有的话,插入操作就会发生阻塞,直到拥有间隙锁的那个事务提交为止(释放间隙锁的时刻),在此期间会生成一个插入意向锁,表明有事务想在某个区间插入新记录,但是现在处于等待状态。

举个例子,假设事务 A 已经对表加了一个范围 id 为(3,5)间隙锁。

当事务 A 还没提交的时候,事务 B 向该表插入一条 id = 4 的新记录,这时会判断到插入的位置已经被事务 A 加了间隙锁,于是事物 B 会生成一个插入意向锁,然后将锁的状态设置为等待状态(PS:MySQL 加锁时,是先生成锁结构,然后设置锁的状态,如果锁状态是等待状态,并不是意味着事务成功获取到了锁,只有当锁状态为正常状态时,才代表事务成功获取到了锁),此时事务 B 就会发生阻塞,直到事务 A 提交了事务。

插入意向锁名字虽然有意向锁,但是它并不是意向锁,它是一种特殊的间隙锁,属于行级别锁

尽管「插入意向锁」也属于间隙锁,但两个事务却不能在同一时间内,一个拥有间隙锁,另一个拥有该间隙区间内的插入意向锁(当然,插入意向锁如果不在间隙锁区间内则是可以的)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/304873.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL基础知识1

一、基本知识 1、定义 2、语句结构 二、库和表的操作 1、创建、删除库 方法一 在navicat的查询中写 方法二 用mysql命令窗口写 1、用管理员身份运行MySQL的窗口 2、先看一下已经存在的数据库 3、新建数据库 2、导入表 方法一 用dos命令窗口,管理员身份运行…

LeetCode(242)有效的字母异位词⭐

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输…

大前端nestjs入门教程系列(四):如何nestjs整合mysql数据库

经过前面的几篇文章,想必大家已经对nestjs有了基础的了解,那么这篇文章就带大家玩玩数据库,学会了这篇,就离大前端又进了一步 Nest与数据库无关,使你可以轻松地与任何 SQL 或 NoSQL 数据库集成。 根据你的喜好&#xf…

【办公自动化】Window电脑如何设置定时任务计划

在Windows系统中,我们可以使用任务计划程序来创建和管理定时任务。任务计划程序是Windows操作系统自带的一个功能,可以帮助我们自动执行一些重复性的任务,例如备份文件、更新软件等。 一、打开任务计划程序 首先,我们需要打开任…

【YOLO系列】 YOLOv4思想详解

前言 以下内容仅为个人在学习人工智能中所记录的笔记,先将目标识别算法yolo系列的整理出来分享给大家,供大家学习参考。 本文未对论文逐句逐段翻译,而是阅读全文后,总结出的YOLO V4论文的思路与实现路径。 若文中内容有误&#xf…

跟我学java|Stream流式编程——Stream 基础

一、流式编程的概念和作用 Java 流(Stream)是一连串的元素序列,可以进行各种操作以实现数据的转换和处理。流式编程的概念基于函数式编程的思想,旨在简化代码,提高可读性和可维护性。 Java Stream 的主要作用有以下几个方面: 简化…

vite 如何设置 pwa,让网页类似 app 那样运行,使用插件 vite-plugin-pwa

vite 如何设置 pwa,让网页类似 app 那样运行,使用插件 vite-plugin-pwa 一、概述 情况还是那么个情况,还是原来的项目 vue2 改为 vitetsvue3 遇到的问题,今天这个问题是如何 在 Vite 环境下设置 PWA。 PWA 就是网页应用可以像 a…

GFP-CERTIFIED®FLUOFORTE®钙离子检测试剂盒

Enzo Life Sciences的GFP-CERTIFIED FLUOFORTE Calcium assay kit提供了一种荧光分析方法,用于检测广泛生物靶标的细胞内钙动员情况。相对于其他商业化的染料,GFP-CERTIFIED FLUOFORTE染料是最亮和最灵敏的荧光钙指示剂。该试剂盒为贴壁和非贴壁细胞系提…

国产CPU--飞腾信息技术有限公司

一、发展历程 飞腾CPU最早是国防科技大学立项研究的科技项目。 2014年,由中国电子信息产业集团、天津市滨海新区政府和天津先进技术研究院联合支持成立飞腾信息技术有限公司。目前,CEC通过中国长城控股公司28.04%股份,为公司最大股东。 二、…

外贸SaaS软件功能有哪些?

外贸SaaS软件功能有哪些?主要有客户管理,销售管理,库存,财务等管理,均是用过saas模式实现的客户端软件功能,这里以孚盟外贸saas软件为例,具体如下: 外贸SaaS软件的功能主要包括以下几…

小程序系列--6.WXSS 模板样式

一. 什么是 WXSS WXSS (WeiXin Style Sheets)是一套样式语言,用于美化 WXML 的组件样式,类似于网页开发中的 CSS。 1.WXSS 和 CSS 的关系 二、rpx 1. 什么是 rpx 尺寸单位 rpx(responsive pixel)是微信小程序独有的&#x…

10个实用的产品说明书模板制作技巧

产品说明书是一个重要的工具,可以帮助用户理解如何使用和维护他们购买的产品。制作一个易于理解和使用的产品说明书对提高客户满意度和忠诚度具有重要价值。 而产品说明书模板是一种预先设计好的框架,它将设计、排版和内容结构的复杂性降到最低&#xf…

使用串口 DMA 模式接收不定长数据

一、简介 曾经遇到客户有一个需求,需要用串口 DMA 的方式接收不定长度的数据,DMA 有个缺点就是在每次传输前需要设定好传输的字节长度,这种方式显然对于接收不定长度的数据来说没有那么灵活。但 DMA 也有着显著的优点,如可直接访…

fail-safe 机制与 fail-fast 机制分别有什么作用

前段时间一个小伙伴去面试,遇到这样一个问题。 ”fail-safe 机制与 fail-fast 机制分别有什么作用“ 他说他听到这个问题的时候,脑子里满脸问号。那么今天我们来看一下,关于这个问题, 看看高手应该如何回答吧。 一、问题解析 fa…

MODBUS转PROFINET网关与全数字交流伺服配置案例

MODBUS转PROFINET网关连接与全数字交流伺服驱动系统的配置案例,这一通信方式极大地简化了工业自动化系统中的数据传输和控制过程。变频器和伺服电机可以实现数据交流和控制指令的实时传输,从而实现更精确更高效的生产过程。 案例简介:本案例是…

智慧灌溉解决方案(基于物联网的智能灌溉系统)

​ 详情:智慧水务数字孪生安全监测解决方案提供商-星创 (key-iot.com.cn) 随着农业IOT的快速发展,智慧灌溉正成为提高农业水资源利用效率,实现精准灌溉的重要技术手段。完整的智慧灌溉系统由实地各类传感设备以及后台管理软件平台组成,可以实现对整个灌区的监测和精…

MySQL 定时清理Binlog日志并自动清理

MySQL 定时清理Binlog日志并自动清理 MySQL的二进制日志(Binlog)对于数据库的恢复和复制是至关重要的。然而,随着时间的推移,这些日志文件可能会占据大量存储空间。因此,及时而安全地删除这些日志文件变得非常重要。 …

【python】OpenCV—Histogram(9)

学习参考来自 Python下opencv使用笔记(九)(图像直方图) 更多学习笔记可以参考 【python】OpenCV—RGB(1)【python】OpenCV—Rectangle, Circle, Selective Search(1.2)【python】…

CHS_02.1.3.2+中断和异常

CHS_02.1.3.2中断和异常 中断有哪些类型中断的作用中断有哪些种类型另一个内中段的例子外中段的例子 中断的分类中断机制背后的基本原理回顾 在这个小节中 我们会学习中断和异常相关的知识点 那首先我们会介绍中断的作用 这其实在上小节当中也有提到过 只不过由于这个内容十分重…

如何为图片加水印?

如何为图片加水印?在许多情况下,图片的分享和传播已经变得非常普遍。然而,随着图片的广泛传播,也带来了一些问题,例如盗用、未经授权的使用以及信息的混淆。为了保护自己的照片版权,标识归属或增加品牌的可…