MySql InnoDB锁类型

article/2025/8/19 1:44:01

MySql InnoDB锁类型

从类型上来分类,InnoDB存储引擎实现了两种标准的锁

  • 共享锁(S-Lock):允许事务读一行数据

  • 排它锁(X-Lock):允许事务删除或者更新一行数据

如果一个事务获取了S锁,那么其他事务也可以立即获得S锁,但如果要对记录加X锁,必须等待该记录的所有锁(S或X)释放后才能加成功。如下表所示为S和X锁的兼容性

XS
X不兼容不兼容
S不兼容兼容

MySql支持多粒度的锁定操作,这就允许事务在表级和行级上的锁同时存在。为了支持在不同粒度上的加锁操作,InnoDB支持了额外的一种锁,意向锁(Intention Lock)。意向锁是将锁定的对象分为多个层级,意味着事务希望在更细粒度上进行加锁。

下边是一个网友介绍的意向锁的作用:

innodb的意向锁有什么作用?
mysql官网上对于意向锁的解释中有这么一句话
“The main purpose of IX and IS locks is to show that someone is locking a row, or going to lock a row in the table.”
意思是说加意向锁的目的是为了表明某个事务正在锁定一行或者将要锁定一行。
那么,意向锁的作用就是“表明”加锁的意图,可是为什么要表明这个 意图呢?
如果仅仅锁定一行仅仅需要加一个锁,那么就直接加锁就好了,这里要表明加锁意图的原因是因为要锁定一行不仅仅是要加一个锁,而是要做一系列操作吗?
​
作者:尹发条地精
​
我最近也在看这个,我说一下我的理解
①在mysql中有表锁,LOCK TABLE my_tabl_name READ;  用读锁锁表,会阻塞其他事务修改表数据。LOCK TABLE my_table_name WRITe; 用写锁锁表,会阻塞其他事务读和写。
②Innodb引擎又支持行锁,行锁分为共享锁,一个事务对一行的共享只读锁。排它锁,一个事务对一行的排他读写锁。
③这两中类型的锁共存的问题考虑这个例子:
事务A锁住了表中的一行,让这一行只能读,不能写。之后,事务B申请整个表的写锁。如果事务B申请成功,那么理论上它就能修改表中的任意一行,这与A持有的行锁是冲突的。
数据库需要避免这种冲突,就是说要让B的申请被阻塞,直到A释放了行锁。
​
数据库要怎么判断这个冲突呢?
step1:判断表是否已被其他事务用表锁锁表
step2:判断表中的每一行是否已被行锁锁住。
注意step2,这样的判断方法效率实在不高,因为需要遍历整个表。
于是就有了意向锁。在意向锁存在的情况下,事务A必须先申请表的意向共享锁,成功后再申请一行的行锁。在意向锁存在的情况下,
上面的判断可以改成
step1:不变
step2:发现表上有意向共享锁,说明表中有些行被共享行锁锁住了,因此,事务B申请表的写锁会被阻塞。
​
注意:申请意向锁的动作是数据库完成的,就是说,事务A申请一行的行锁的时候,数据库会自动先开始申请表的意向锁,不需要我们程序员使用代码来申请。
​
总结:为了实现多粒度锁机制(白话:为了表锁和行锁都能用)

意向锁分类:

  • 意向共享锁(IS):事务想要获取一张表中某几行的共享锁

  • 意向排它锁(IX):事务想要获取一张表中的某几行的排它锁

意向锁的兼容性:

ISIXSX
IS兼容兼容兼容不兼容
IX兼容兼容不兼容不兼容
S兼容不兼容兼容不兼容
X不兼容不兼容不兼容不兼容

一致性非锁定读

一致性非锁定读是指InnoDB存储引擎通过多版本控制的方式来读取当前执行时间数据库中行的数据。如果读取的行正在执行DELETE或者UPDATE操作,这时读取操作并不会因此等待该行的X锁释放,而是读取一个快照数据。

当然在不同的事务隔离级别下,非一致锁定读读取的快照顺序也是不一样的。

  • READ COMMITTED:读取的快照数据永远是最新的一份快照数据

  • READ REPEATABLE:读取的快照是当前事务开始时的快照数据

一致性锁定读:

在数据库隔离级别为RR级别下,select操作使用了一致性非锁定读。在某些情况下,用户需要显示地对读操作进行加锁以保证数据的一致性逻辑。一般来说会使用以下两种方式:

  • select … for update

  • select … lock in share model

其中select … for update会给选择的行加一个X锁,select … lock in share model会加一个S锁。并且这两种用法必须在一个事务中。当事务提交后锁也就释放了。

锁的算法

InnoDB有3中锁的算法

  • Record Lock:在单行上加锁

  • Gap Lock:间隙锁,锁定一个范围,但不包含当前记录

  • Next-Key Lock:Gap Lock+Record Lock,锁定一个范围,并包含当前记录。

对于Next-Key Lock,其解决的是数据库的幻想问题,对于一个索引包含10,11,13,20的数据,那么Next-Key Lock可以锁定的区间为:

(-无穷,10],(10,11],(11, 13],(13, 20],(20, +无穷)

当查询的索引含有唯一属性时,InnoDB会对Next-Key Lock进行优化,将其降级为Record Key,只是锁住索引本身,并不会锁范围。

 

但对于非聚集索引,则会在非聚集索引上加Next-Key Lock

对于select * from z where b = 3,则会在(1, 3]上加锁,同时会在该记录后边加一个gap lock,即(3, 6),如果执行以下两个语句都会造成堵塞。

由此可见gap 锁是为了解决数据库的幻读现象。

对于唯一键的锁定,Next-Key Lock会降级为Record Lock的前提仅限于查询所有的唯一索引列。若唯一索引有多个列组成,而查询的是多个索引中的一个,那么查询仍然是range查询,而不是point查询,仍然使用Next-Key Lock进行锁定。

幻读问题

上图所示为幻读现象,A在同一个事务中读取的数据不一致,gap lock则解决了这个问题。在RR隔离级别下,gap锁会为(2, 无穷)加X锁,这样会话B插入4时就会阻塞。

锁存在的问题

脏读

在READ uncommitted隔离级别下,事务B可以读取A未提交的数据,如果A rollback,则B两次读取的数据将不一致。而在READ Committed隔离级别下,事务读取的是记录最新提交的快照,因此可以避免脏读现象

幻读

在READ Committed隔离级别下,当使用范围查询时会出现两次读取的数据不一致,因此造成幻读现象,在READ REPEATABLE级别下,由于Gap锁的作用可以避免幻读。


http://chatgpt.dhexx.cn/article/ZnlkrRaj.shtml

相关文章

锁的分类总结

锁的分类是从不同角度去看的。同一个锁也可以同时属于多种类型。 一、乐观锁与悲观锁 1. 互斥同步锁的劣势 阻塞和唤醒会带来性能的劣势 用户态和核心态切换上下文切换检查是否有被阻塞线程需要被唤醒等等 可能出现永久阻塞的问题:持有锁的线程永久阻塞了&#…

锁的介绍和分类(轻量级锁 重量级锁 偏向锁 自旋锁 互斥锁)

目录 公平锁 非公平锁 非公平锁 公平锁 可重入锁 不可重入锁 可重入锁(递归锁) 不可重入锁 轻量级锁 重量级锁 偏向锁 重量级锁 自旋锁(循环上锁) 轻量级锁 轻量级锁的释放 偏向锁 自旋锁和互斥锁 自旋锁 互斥锁 为何要使用自旋锁 自旋…

最全锁种类

你可能听说过很多锁,也看到过很多文章讲解锁,这篇我在这里将对锁的不同分类进行描述锁的设计 互斥锁–共享锁 互斥锁:顾名思义,就是互斥的,意思就是当前同步代码块只能被一个线程访问,sync、reentrantlock、…

锁的类型有哪些

锁的类型有哪些 基于锁的属性分类:共享锁、排他锁。 基于锁的粒度分类:行级锁(INNODB)、表级锁(INNODB、MYISAM)、页级锁(BDB引擎 )、记录锁、间隙锁、临键锁。 基于锁的状态分类:意向共享锁、意向排它锁 共享锁(Share Lock) 共享锁又称读锁&…

Kettle使用教程之Job使用

1、Kettle的Job使用十分简单,这里也只是演示比较简单的操作,创建Job 2、点击转换,然后点击浏览,选择转换对象 3、执行按钮,运行该转换 4、如果需要长期的进行定时转换,可以在Job中的start控件进行配置 转载…

Kettle使用教程之数据同步

Kettle使用教程之数据同步 数据模型原型如下: 1、表输入,针对最新的数据输入的表 2、目标表,需要更新的表 3、两个表都需要进行排序操作 4、合并,根据id进行合并 5、数据同步(包括更新、插入、删除) 6、点击运行,就可…

ETL开发工具KETTLE使用教程

Kettle的建立数据库连接、使用kettle进行简单的全量对比插入更新:kettle会自动对比用户设置的对比字段,若目标表不存在该字段,则新插入该条记录。若存在,则更新。 Kettle简介:Kettle是一款国外开源的ETL工具&#xff0…

ETL工具Kettle使用教程

Kettle使用教程之数据同步 数据同步标识字段 标志字段的值有4种,分别是: “Identical” : 关键字段在新旧数据源中都存在,且域值相同 “changed” : 关键字段在新旧数据源中都存在,但域值不同 “new” : 旧数据源中没有找到该…

Kettle使用教程(一)—— 在MacOS系统中安装 Kettle

Kettle使用教程(一)—— 在MacOS系统中安装 Kettle 一、环境准备二、下载并启动Kettle二、初始化资源库 一、环境准备 Kettle 9.2JDK 1.8 (安装指引)Mysql(安装指引) 二、下载并启动Kettle 首先到官网下…

Kettle使用教程(问题)

关于kettle的介绍此文不做介绍 笔者电脑环境 winoraclejdk1.8kettle7.1 1. 考虑到在在官网下载速度比较慢,在这里可以使用国内的镜像 国内镜像 2. 配置java环境 (1) kettle需要以来java环境,因为没有安装java环境的朋友请移步配置java环境&#xff…

R-P-Faster R-CNN day65 读论文:高分辨率遥感影像综合地理空间目标检测框架

An Efficient and Robust Integrated Geospatial Object Detection Framework for High Spatial Resolution Remote Sensing Imagery 1. Introduction3. Overview of the Proposed R-P-Faster R-CNN Framework3.1. 有效集成区域建议网络与目标检测Faster R-CNN框架3.1.2. RPN与…

多特征融合的高分辨率遥感图像海陆分离——刘思彤

论文阅读笔记 摘要 为解决目前大多数海陆分离方法仅利用单一特征对图像进行处理,从而导致误分割或存在大量孤立区域,造成后续处理工作难度大或无法开展的问题,提出一种联合灰度、梯度和纹理等多特征的海陆分离方法。针对不同的陆地类型选用…

从实现的技术手段细数:高分辨率遥感影像+人工智能的现在和未来

【转自】http://baijiahao.baidu.com/s?id1601901487917871613&wfrspider&forpc 人工智能不可阻挡地向各行业渗透。这一现象,恰巧撞上了“商业遥感卫星发射潮”。这似乎预示了某种潜流。此刻,从事卫星遥感影像解译和大数据提取的专业人士、科研…

高分辨率光学遥感影像舰船目标检测与识别算法研究(尹莹莹)

论文阅读笔记 摘要 本文主要研究海陆背景下的光学遥感图像舰船目标检测与识别技术,重点研究了海陆分离、舰船目标疑似区域检测技术与疑似区域目标识别技术。 海陆分离: 采用了OTSU与形态学相结合的方法实现海路区域初步划分;再以孤立区域内…

基于高分辨率影像的潍坊大棚遥感提取

1 背景 朋友,当你坐在经过潍坊的火车上的时候,是否被窗外的风景震惊过?那一望无际的大棚,像一片海洋,又像一片草原,连接天际,一眼望不到边。在卫星地图上,白茫茫一片,蔚为…

如何浏览与下载全球免费的地图高分辨率(亚米级)的遥感影像?

目录 一.引言 二、高分辨率的地图数据源简介 1.Google Earth影像 2.Esri World Image 3.天地图 4.必应地图 5.高德地图 三、浏览与下载该地图源 1.Google Earth影像浏览与下载​ 2.Esri World Image的浏览与下载 3.天地图瓦片地址浏览与下载 4.必应地图浏览与下载 …

学习笔记-基于全局和局部对比自监督学习的高分辨率遥感图像语义分割-day2

高分辨率遥感图像语义分割-day2 摘要一、引言二、方法2.1 对比学习2.2 全局风格与局部匹配对比学习网络(GLCNet)2.2.1 全局风格对比学习模块:2.2.2局部匹配对比学习: 三、实验和结果A. 数据说明B. 实验设置1 基线:2 评…

基于全局和局部对比自监督学习的高分辨率遥感图像语义分割day3 - 网络结构

基于全局和局部对比自监督学习的高分辨率遥感图像语义分割day3 - 网络结构 前言自监督学习部分语义分割细调部分总结 前言 想要学习一个网络,最重要的就是网络结构和损失函数,一个讲了网络是怎么学,一个讲了网络将会学成什么样(个…

paddlepaddle打比赛之高分辨率遥感影像建筑物变化检测

★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>> 1 赛事背景 城市是人类生活、生产的主要场所,在社会经济活动中处于重要位置。经济发展、人口增长和城市化进程的加快导致了城市地区的急剧变化,准确及时地识…

论文笔记(一)NFANET:一种新的高分辨率遥感影像弱监督水体提取方法

NFANet: A Novel Method for Weakly Supervised Water Extraction from High-Resolution Remote Sensing Imagery NFANET:一种新的高分辨率遥感影像弱监督水体提取方法 作者:Ming Lu,Leyuan Fang,Muxing Li,Bob Zhang,Yi Zhang,Pedram Ghamisi 期刊&…