浅析MySQL事务锁

news2025/7/16 5:23:12

在 MySQL 中,事务锁是用于确保数据一致性和并发控制的重要机制。事务锁可以帮助防止多个事务同时修改同一数据,从而避免数据不一致和脏读、不可重复读、幻读等问题。
以下是 MySQL 事务锁的关键点总结:

  1. 事务锁:用于确保数据一致性和并发控制。
  2. 锁的类型
    • 行级锁:InnoDB,粒度细,性能高。
    • 表级锁:MyISAM,粒度粗,性能低。
  3. 锁的获取与释放:通过 SELECT ... LOCK IN SHARE MODESELECT ... FOR UPDATE 获取锁,事务提交或回滚时释放锁。
  4. 常见锁类型
    • 共享锁(S 锁):允许多个事务读取,阻止修改。
    • 排他锁(X 锁):阻止其他事务读取和修改。
    • 意向锁(IS, IX, SIX 锁):表示事务的意图。
    • 间隙锁(Gap Locks):防止幻读。
    • 记录锁(Record Locks):锁定具体的行。
    • 间隙加记录锁(Next-Key Locks):锁定索引记录及其前后间隙。
  5. 事务隔离级别:影响锁的使用和数据一致性。
  6. 锁冲突:了解锁冲突和死锁,优化事务逻辑。
  7. 锁的优化:减少锁持有时间,选择合适的隔离级别,使用索引,避免死锁。
  8. 监控与诊断:使用 SHOW ENGINE INNODB STATUSinformation_schema 查看锁信息。

详述:

文章目录

      • **1. 事务锁概述**
        • **1.1 什么是事务锁?**
        • **1.2 事务隔离级别**
      • **2. 锁的类型**
        • **2.1 行级锁(Row-Level Locks)**
        • **2.2 表级锁(Table-Level Locks)**
      • **3. 锁的获取与释放**
        • **3.1 获取锁**
        • **3.2 释放锁**
      • **4. 常见锁类型**
        • **4.1 共享锁(Shared Lock, S 锁)**
        • **4.2 排他锁(Exclusive Lock, X 锁)**
        • **4.3 意向锁(Intention Locks)**
        • **4.4 间隙锁(Gap Locks)**
        • **4.5 记录锁(Record Locks)**
        • **4.6 间隙加记录锁(Next-Key Locks)**
      • **5. 示例**
        • **5.1 使用共享锁(S 锁)**
        • **5.2 使用排他锁(X 锁)**
        • **5.3 使用间隙锁(Gap Locks)**
        • **5.4 使用记录锁(Record Locks)**
        • **5.5 使用间隙加记录锁(Next-Key Locks)**
      • **6. 锁冲突**
        • **6.1 锁冲突示例**
        • **6.2 死锁**
      • **7. 事务隔离级别与锁的关系**
        • **7.1 读未提交(Read Uncommitted)**
        • **7.2 读已提交(Read Committed)**
        • **7.3 可重复读(Repeatable Read)**
        • **7.4 串行化(Serializable)**
      • **8. 锁的优化**
        • **8.1 减少锁持有时间**
        • **8.2 选择合适的隔离级别**
        • **8.3 使用索引**
        • **8.4 避免死锁**
      • **9. 监控与诊断**
        • **9.1 查看锁信息**
        • **9.2 使用 `information_schema`**
      • **10. 示例代码**
        • **10.1 创建表**
        • **10.2 使用共享锁**
        • **10.3 使用排他锁**

1. 事务锁概述

1.1 什么是事务锁?
  • 事务锁:在事务执行期间,数据库系统使用锁来控制对数据的访问,确保事务的隔离性和一致性。
  • 目的
    • 防止脏读:一个事务读取了另一个事务未提交的数据。
    • 防止不可重复读:一个事务多次读取同一数据时,数据被其他事务修改。
    • 防止幻读:一个事务在两次查询之间,其他事务插入了新的数据行。
1.2 事务隔离级别
  • 读未提交(Read Uncommitted):最低的隔离级别,允许脏读。
  • 读已提交(Read Committed):不允许脏读,但允许不可重复读和幻读。
  • 可重复读(Repeatable Read):默认隔离级别,不允许脏读和不可重复读,但允许幻读。
  • 串行化(Serializable):最高的隔离级别,完全串行化事务,不允许脏读、不可重复读和幻读。

2. 锁的类型

2.1 行级锁(Row-Level Locks)
  • 适用存储引擎:InnoDB
  • 特点
    • 粒度细:只锁定特定的行,减少锁冲突。
    • 性能高:适用于高并发场景。
  • 类型
    • 共享锁(Shared Lock, S 锁):允许多个事务同时读取同一行,但阻止其他事务修改该行。
    • 排他锁(Exclusive Lock, X 锁):阻止其他事务读取和修改该行。
2.2 表级锁(Table-Level Locks)
  • 适用存储引擎:MyISAM、InnoDB(某些情况下)
  • 特点
    • 粒度粗:锁定整个表,可能导致高并发下的性能瓶颈。
    • 简单:实现简单,但可能导致锁冲突。
  • 类型
    • 读锁(Read Lock):允许多个事务同时读取表,但阻止其他事务写入表。
    • 写锁(Write Lock):阻止其他事务读取和写入表。

3. 锁的获取与释放

3.1 获取锁
  • 共享锁:使用 SELECT ... LOCK IN SHARE MODE
    SELECT * FROM table_name WHERE id = 1 LOCK IN SHARE MODE;
    
  • 排他锁:使用 SELECT ... FOR UPDATE
    SELECT * FROM table_name WHERE id = 1 FOR UPDATE;
    
3.2 释放锁
  • 自动释放:事务提交(COMMIT)或回滚(ROLLBACK)时自动释放锁。
  • 显式释放:某些情况下可以通过特定的 SQL 语句释放锁。

4. 常见锁类型

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

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

相关文章

算法-链表

小细节 初始化问题 我们这样子new一个ListNode 它里面的默认值是0,所以我们不能这样 如果我们为空,我们要返回null 节点结束条件判断(多创建节点问题) 参考示例3217 解析: 我的答案是多了一个无用节点 这是因为我每…

3.8/Q1,GBD数据库最新文章解读

文章题目:Regional and National Burden of Traumatic Brain Injury and Spinal Cord Injury in North Africa and Middle East Regions, 1990-2021: A Systematic Analysis for The Global Burden of Disease Study 2021 DOI:10.1007/s44197-025-00372-…

51单片机实验二:数码管静态显示

目录 一、实验环境与实验器材 二、实验内容及实验步骤 1.单个数码管显示 2.六个数码管依次从0~F变换显示 3.proteus仿真 一、实验环境与实验器材 环境:Keli,STC-ISP烧写软件,Proteus. 器材:TX-1C单片机(STC89C52RC…

Linux驱动开发进阶(八)- GPIO子系统BSP驱动

文章目录 1、前言2、pinctrl子系统3、pinctrl bsp驱动4、gpio子系统5、gpio bsp驱动 1、前言 学习参考书籍以及本文涉及的示例程序:李山文的《Linux驱动开发进阶》本文属于个人学习后的总结,不太具备教学功能。 2、pinctrl子系统 在讨论gpio子系统时&…

【Windows】安装或者点击OneDrive没有任何反应的解决方案

一些Windows企业版或者神州网信政府版的策略会禁止使用OneDrive,双击OneDrive安装程序或者点击OneDrive软件会没有任何反应。通过下面的设置可以解除相关的限制。 1、修改注册表 打开注册表管理器。依次HKEYLOCAL_MACHINE\Software\Policies\Microsoft\Windows\One…

Python爬虫第17节-动态渲染页面抓取之Selenium使用下篇

目录 引言 一、获取节点信息 1.1 获取属性 1.2 获取文本值 1.3 获取ID、位置、标签名、大小 二、切换Frame 三、延时等待 3.1 隐式等待 3.2 显式等待 四、前进后退 五、Cookies 六、选项卡管理 七、异常处理 引言 这一节我们继续讲解Selenium的使用下篇&#xff0…

HarmonyOS 第2章 Ability的开发,鸿蒙HarmonyOS 应用开发入门

第2章 Ability的开发 本章内容 本章介绍HarmonyOS的核心组件Ability的开发。 2.1 Ability概述 2.2 FA模型介绍 2.3 Stage模型介绍 2.4 Ability内页面的跳转和数据传递 2.5 Want概述 2.6 实战:显式Want启动Ability 2.7 实战:隐式Want打开应用管理 2.8 小结 2.9 习题 2.1 Abili…

day2-小白学习JAVA---java第一个程序

java第一个程序 1、新建一个文件,以.java为结尾2、用编辑器打开后写入代码(本人写前端,所以用vscode,也可用其他)3、编译文件4、运行文件5、HelloWorld代码解释6、文档注释 1、新建一个文件,以.java为结尾 …

Rockchip 新一代 64 位处理器 RK3562--九鼎开发板

RK3562 是 Rockchip 新一代 64 位处理器 RK3562(Quad-core ARM Cortex-A53,主频 最高 2.0GHz),最大支持 8GB 内存;内置独立的 NPU,可用于轻量级人工智能应用,RK3562 拥有 PCIE2.1/USB3.0 OTG/…

z-library电子图书馆最新地址的查询方法

对于喜欢读书的伙伴们,应该都听说过z站(z-library),优点多多,缺点就是地址不稳定,经常会变化网站地址。然后我最近发现了一个工具,可以不间断更新官方可用的z站地址:电子书最新地址

Spring Boot 3 + SpringDoc:打造接口文档

1、背景公司 新项目使用SpringBoot3.0以上构建,其中需要对外输出接口文档。接口文档一方面给到前端调试,另一方面给到测试使用。 2、SpringDoc 是什么? SpringDoc 是一个基于 Spring Boot 项目的库,能够自动根据项目中的配置、…

Json 在线格式化 - 加菲工具

Json 在线格式化 打开网站 加菲工具 选择“Json 在线格式化” 或者直接进入 https://www.orcc.top/tools/json 输入Json,点击左上角的“格式化”按钮 得到格式化后的结果

HarmonyOS-ArkUI V2装饰器: @Monitor装饰器:状态变量修改监听

Monitor作用 Monitor的作用就是来监听状态变量的值变化的。被Monitor修饰的函数,会在其对应监听的变量发生值的变化时,回调此函数,从而可以让您知道是什么值发生变化了,变化前是什么值,变化后是什么值。 V1版本的装饰器,有个叫@Watch的装饰器,其实也有监听变化的能力,…

微信小程序文字混合、填充动画有效果图

效果图 .wxml <view class"text" style"--deg:{{deg}}deg;"><view>混合父级颜色</view> </view> <view class"fill {{status?action:}}">文字颜色填充</view> <button bind:tap"setStatus"…

【计算机网络 | 第一篇】计算机网络基础知识

网络分层模型 1.OSI七层模型国际标准化组织提出的一个网络分层模型&#xff0c;总共有七层&#xff0c;其大体功能以及每一层分工如下所示&#xff1a; 每一层都专注做一件事&#xff0c;并且每一层都需要下一层提供的功能。 OSI七层模型七层结构体系清晰&#xff0c;理论完整…

再读bert(Bidirectional Encoder Representations from Transformers)

再读 BERT&#xff0c;仿佛在数字丛林中邂逅一位古老而智慧的先知。初次相见时&#xff0c;惊叹于它以 Transformer 架构为罗盘&#xff0c;在预训练与微调的星河中精准导航&#xff0c;打破 NLP 领域长久以来的迷雾。而如今&#xff0c;书页间跃动的不再仅是 Attention 机制精…

uCOS3实时操作系统(系统架构和中断管理)

文章目录 系统架构中断管理ARM中断寄存器相关知识ucos中断机制 系统架构 ucos主要包含三个部分的源码&#xff1a; 1、OS核心源码及其配置文件&#xff08;ucos源码&#xff09; 2、LIB库文件源码及其配置文件&#xff08;库文件&#xff0c;比如字符处理、内存管理&#xff0…

图像预处理-图像噪点消除

一.基本介绍 噪声&#xff1a;指图像中的一些干扰因素&#xff0c;也可以理解为有那么一些点的像素值与周围的像素值格格不入。常见的噪声类型包括高斯噪声和椒盐噪声。 滤波器&#xff1a;也可以叫做卷积核 - 低通滤波器是模糊&#xff0c;高通滤波器是锐化 - 低通滤波器就…

6.数据手册解读—运算放大器(二)

目录 6、细节描述 6.1预览 6.2功能框图 6.3 特征描述 6.3.1输入保护 6.3.1 EMI抑制 6.3.3 温度保护 6.3.4 容性负载和稳定性 6.3.5 共模电压范围 6.3.6反相保护 6.3.7 电气过载 6.3.8 过载恢复 6.3.9 典型规格与分布 6.3.9 散热焊盘的封装 6.3.11 Shutdown 6.4…

用 Deepseek 写的uniapp油耗计算器

下面是一个基于 Uniapp 的油耗计算器实现&#xff0c;包含 Vue 组件和页面代码。 1. 创建页面文件 在 pages 目录下创建 fuel-calculator 页面&#xff1a; <!-- pages/fuel-calculator/fuel-calculator.vue --> <template><view class"container"…