MySQL 锁合集与事务隔离级别

概览

在数据库管理中,锁是用来控制多个事务对同一数据的并发访问的机制。InnoDB作为MySQL的默认事务型存储引擎,提供了多种类型的锁来保障事务的隔离性并减少冲突,从而维护数据库的完整性和一致性。以下是InnoDB提供的主要锁类型:

  1. 共享锁(S 锁)
    共享锁允许一个或多个事务读取同一数据行,并阻止其他事务在此数据行上获取排他锁。这种锁是协作型的,使得多个读操作可以不受干扰地同时发生。

  2. 排他锁(X 锁)
    排他锁是比共享锁更严格的锁,当事务持有排他锁时,它可以对数据行进行更新操作。其他事务不能读取或写入这个已被排他锁保护的数据行,直到锁被释放。

  3. 意向共享锁(IS 锁)
    意向锁是InnoDB用来表明事务意图在表的某些行上设置共享锁的方式。当事务打算在表中的多行上设置共享锁时,它首先会在表级别上设置意向共享锁。

  4. 意向排他锁(IX 锁)
    类似意向共享锁,意向排他锁表明事务打算在表的一行或多行上设置排他锁。它是一个表级锁,允许事务显示其对数据行的未来排它锁定的意图。

  5. 记录锁
    记录锁是最精细级别的锁,它直接作用于表中的单个记录。这种锁类型用于控制对具体一行数据的读写操作,通常与其他锁类型结合使用,以实现更高的并发性。

  6. 间隙锁
    间隙锁用于锁定一组记录的间隙,也就是两个索引记录之间的范围。这种锁防止其他事务在间隙范围内插入新行,是InnoDB间隙锁定策略的一部分。

  7. Next-Key锁
    Next-Key锁结合了记录锁和间隙锁的特性,锁定一个索引记录以及该记录前的间隙。这种锁是InnoDB中默认的锁类型,旨在防止幻读现象。

  8. 插入意向锁
    当事务准备插入新行时,它会先设置插入意向锁。这个锁与其它事务的插入意向锁是兼容的,但与在相同位置的其他类型锁冲突,用于在插入时维持间隙锁的正确性。

  9. AUTO-INC锁
    AUTO-INC锁是一种特殊类型的锁,在事务插入新值到带有AUTO_INCREMENT属性的列时使用。这个锁确保新生成的自动增长值的唯一性和连续性。

锁列表

  1. 共享锁(S 锁): 允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁
  2. 排他锁(X 锁): 允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁
  3. 意向共享锁(IS 锁): 表明一个事务打算在表中的行上设置 S 锁
  4. 意向排他锁(IX 锁): 表明一个事务打算在表中的行上设置 X 锁
  5. 记录锁: 用于锁定表中的行
  6. 间隙锁: 用于锁定表中的一个“间隙”,用以防止并发的插入操作
  7. Next-Key锁: 锁定一个索引记录与该记录之前的“间隙”,即锁定的是该键值的前闭后开区间
  8. 插入意向锁: 当InnoDB插入一行时,它会先在被插入的位置设置一个插入意向锁,这意味着这个事务打算插入一行
  9. AUTO-INC锁: 在插入AUTO_INCREMENT列的新值时使用

事务隔离级别和锁关系

事务隔离级别使用的锁类型不使用的锁类型脏读幻读不可重复读原因
读未提交 (Read Uncommitted)排他锁(X锁)共享锁(S锁), 间隙锁, Next-Key锁, 意向共享锁(IS锁), 意向排他锁(IX锁)高并发,最低级别的数据隔离,直接读取数据库中无论是否提交的数据。
读提交 (Read Committed)排他锁(X锁), 记录锁间隙锁, Next-Key锁防止脏读,只能读取提交后的数据,但事务内部的多次读取可能见到不同数据。
可重复读 (Repeatable Read)共享锁(S锁), 排他锁(X锁), Next-Key锁, 插入意向锁间隙锁(可选)默认级别,保证事务内可见数据的一致性,防止幻读和不可重复读。
可序列化 (Serializable)共享锁(S锁), 排他锁(X锁), 意向共享锁(IS锁), 意向排他锁(IX锁), 表级锁间隙锁(可能)最高级别的数据隔离,加锁防止所有事务并发,确保数据一致性。

解释:

  • 脏读:读取到其他未提交事务中的数据。
  • 幻读:在一个事务内读取时,因为其他并发事务的插入操作,一次查询和下一次查询的结果集不一致。
  • 不可重复读:在同一个事务内,多次读取同一数据集合时,因其他事务的修改操作导致后续读取的结果与起始读取不同。

总结

想象你一下,你使用Spring声明式事务@Transactional,然后在代码中各种使用Feign/RestTemplate/WebClient进行内部和外部调用,你想想你的数据库是什么感受。它就各种锁锁锁,然后业务就各种DeadLock,DeadLock。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

速成软件书:真的是神器吗?

那些声称几天就能让你精通软件的书籍,到底是真是假?它们真的是神器吗? 个人看法 快速了解:速成软件书可能适合那些想要快速了解一种软件或技能的初学者。它们可能提供了基础知识和快速入门指导,对于初学者来说可能有所…

linux提权笔记

1 linux提权简介 Linux提权,简单来说,就是用户尝试获取高于其当前权限级别的系统访问权限的过程。在Linux系统中,root用户拥有最高的权限,能够执行任何操作,包括修改系统文件、安装软件、管理用户账户等。而普通用户通…

Java 中文官方教程 2022 版翻译完成

Java 中文官方教程 2022 版教程:入门指南课程:Java 技术现象关于 Java 技术Java 技术能做什么?Java 技术将如何改变我的生活?课程: “Hello World!” 应用程序“Hello World!” 适用于 NetBeans IDE“Hello World!” f…

岭师大数据技术原理与应用-序章-软工版

HeZaoCha-CSDN博客 序章—软工版 一、环境介绍1. VMware Workstation Pro2. CentOS3. Java4. Hadoop5. HBase6. MySQL7. Hive 二、系统安装1. 虚拟网络编辑器2. 操作系统安装 三、结尾 先说说哥们写这系列博客的原因,本来学完咱也没想着再管部署这部分问题的说&…

腾讯云优惠券领取步骤详解

腾讯云是腾讯公司旗下云计算品牌,作为国内领先的云计算服务提供商,为企业和个人提供了丰富的云产品和服务。为了吸引用户上云,腾讯云推出了各种优惠券,让用户在购买云产品时享受更多优惠。本文将为大家详细解析腾讯云优惠券的领取…

文献学习(自备)

收官大作,多组学融合的新套路发NC!! - 知乎 (zhihu.com) Hofbauer cell function in the term placenta associates with adult cardiovascular and depressive outcomes | Nature Communications 病理性胎盘炎症会增加几种成人疾病的风险&a…

系统分析师-参考模型

前言 网络术语中的参考模型指的是OSI参考模型,由ISO(国际标准化组织)制定的一套普遍适用的规范集合,以使得全球范围的计算机平台可进行开放式通信。 ISO创建了一个有助于开发和理解计算机的通信模型,即开放系统互联OS…

探索数据结构:链式队与循环队列的模拟、实现与应用

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:数据结构与算法 贝蒂的主页:Betty’s blog 1. 队列的定义 队列(queue)是一种只允许在一端进…

docker--部署 (超详版) (五)

环境准备:docker,mysql,redis,镜像,nginx 把虚拟机打开,连接xshell,参考博客: https://blog.csdn.net/m0_74229802/article/details/136965820?spm1001.2014.3001.5501 一&#x…

【微信加人自动化】RPA机器人:人人都会实现的机器人

用上这个机器人,一定要心平气和,不要放肆,单号忍住控制在15个人以内(但悄悄的告诉你,可以切换账号呀) 这个加人机器人,人人都可以通过学习自己动手实现,不再局限于遥不可及的“黑科…

通俗易懂:volatile关键字在内存模型中起到什么作用?

在计算机编程语言中,尤其是在Java语言中,volatile关键字对于内存模型的影响至关重要,它主要用于解决多线程环境下的内存可见性和禁止指令重排序问题,以确保并发编程的正确性。以下是volatile关键字在Java内存模型(JMM&…

千川素材投放效果如何追踪:精准识别爆款、潜力、首发、优质素材

在数字营销和广告领域,素材投放的效果直接关乎广告的成功与否。为了在竞争激烈的市场中脱颖而出,广告主和广告从业者需要密切关注素材投放效果,并及时识别出不同类型的素材,如爆款、潜力、首发和优质素材。本文将详细探讨如何进行…

Vue实现SQL语句关键字高亮显示?

SQL关键字高亮 要在Vue中实现SQL语句中关键字的高亮显示&#xff0c;你可以使用类似的方法&#xff0c;但是你需要根据SQL语法的特点来解析并高亮显示关键字。以下是一个示例代码&#xff0c;演示了如何在Vue中实现SQL语句关键字的高亮显示。 <template><div><…

2020年天津市二级分类土地利用数据(矢量)

天津市&#xff0c;位于华北平原海河五大支流汇流处&#xff0c;东临渤海&#xff0c;北依燕山。地势以平原和洼地为主&#xff0c;北部有低山丘陵&#xff0c;海拔由北向南逐渐下降&#xff0c;地貌总轮廓为西北高而东南低。天津有山地、丘陵和平原三种地形&#xff0c;平原约…

世界名校计算机类院系研究机器人的部分列举

计算机院系研究机器人方向的国外高校 一、美国高校 1.卡耐基梅隆大学 计算机学院官网 CMU School of Computer Science 注&#xff1a;CMU的机器人研究所在计算机学院下面&#xff0c;该学院还有其他系 Robotics Institute Carnegie Mellon University : Robotics Educati…

346CK01 噪声源,1 GHz 至 50 GHz

346CK01 噪声源 1 GHz 至 50 GHz Keysight 346CK01 是您使用是德科技噪声系数解决方案处理高频应用的理想伴侣。 凭借其宽带优势&#xff08;1 GHz 至 50 GHz&#xff09;&#xff0c;它可以顶替不同频段的多个噪声源。 另外&#xff0c;它的 SWR 也很低&#xff0c;消除了…

python函数参数中独立星号*的作用

python函数中间有一个&#xff08;&#xff09;分隔&#xff0c;星号后面为*命名关键字参数&#xff0c;星号本身不是参数**。命名关键字参数&#xff0c;在函数调用时必须带参数名字进行调用。如下例子&#xff1a;

第十六章 Redies

一、Redies Remote Dictionary Service 内存存储&#xff0c;NoSQL。基于内存来存储数据。无需 IO&#xff0c;效率高。提供高可用方案。 哨兵模式&#xff0c;分布式数据存储。 1.1 Redis 基本特性 - 关系型数据与非关系型数据库对比。 - SQL > 1. 行存储&#xff0c;…

探索图数据处理的魅力:使用Spark GraphX解析图数据和应用图算法

导语&#xff1a;在当今数据驱动的世界中&#xff0c;图数据处理和分析变得越来越重要。本文将介绍如何使用Spark GraphX&#xff0c;一个强大的图计算库&#xff0c;来处理和分析图数据。通过详细的Java代码示例和模拟输出结果&#xff0c;你将了解如何创建图、执行图操作和应…

mysql修改用户权限

https://blog.csdn.net/anzhen0429/article/details/78296814