MySQL 中的锁机制详解

MySQL 数据库系统在 server 层和存储引擎层都广泛应用了各种锁机制,以确保并发操作下的数据一致性及完整性。本文将详细介绍MySQL中两种关键类型的server层锁以及InnoDB存储引擎的表级和行级锁。

1. Server层锁

1.1 Metadata Lock (MDL)

MDL,即元数据锁,是在server层针对数据库元数据资源采用的一种锁定机制。元数据包括但不限于表结构、索引定义、视图定义等非用户数据部分。MDL 主要服务于以下两个目的:

  • 事务隔离问题:防止在事务执行过程中其他会话修改相关的表结构,造成数据一致性问题。
  • 数据复制问题:在复制环境中,确保所有副本的元数据变更在同步期间的一致性。

1.2 Table Locks

MySQL server层还支持Table Lock,即表锁。表锁是对整个数据表进行锁定,锁定期间,其他会话无法对该表进行写入或可能的并发读取,具体锁定粒度较粗,适合在简单并发环境下提高处理速度。

2. InnoDB 存储引擎表级锁

InnoDB 存储引擎提供了多种表级锁,主要应用在DDL操作或者特定条件下:

  • IS (意向共享锁):表示事务打算在表的某些记录上获取S锁。
  • IX (意向排他锁):表示事务打算在表的某些记录上获取X锁。
  • S (共享锁):允许事务读取一行数据,多个事务可以同时持有同一记录的S锁。
  • X (排他锁):允许事务更新或删除一行数据,只有单个事务能持有记录的X锁。
  • AUTO-INC锁:针对具有AUTO_INCREMENT属性的列,此锁是语句级别的,确保在同一事务中自增序列值的单调递增且互斥分配。

3. InnoDB 存储引擎行级锁

InnoDB 引擎进一步细化锁定粒度至行级,提高了并发性能:

  • RecordLock:记录锁直接锁定具体的行记录,防止其他事务对此记录进行修改。
  • GapLock:间隙锁用于解决“幻读”问题,它锁定的是记录之间的间隙,防止在已锁定间隙中插入新记录。
  • Next-KeyLock:它是RecordLock和GapLock的结合,不仅锁定记录本身,还锁定记录前后的间隙,防止幻读现象。
  • InsertIntentionLock:插入意向锁是在事务尝试插入间隙时获取的,用于协调多个事务在同一间隙内插入记录的行为,减少不必要的等待。

4. 行锁与表锁的选择

在实际应用中,行锁适用于高并发环境下的读写操作,特别是对于涉及大量行记录且频繁更新的情况,可以大大提升并发性能。而全表扫描操作由于无法确定锁定的具体行,通常倾向于使用表锁。

5. 幻读理解

幻读是指在一个事务中按照相同的条件执行两次查询,第一次查询没有返回某些特定记录,但是在第二次查询时却发现了这些原本“不存在”的记录。这是因为在两次查询之间,其他事务插入了满足条件的新记录,并提交了事务。间隙锁和Next-KeyLock正是为了防止此类幻读现象的发生。

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

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

相关文章

SpringCloud Stream 消息驱动

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅,从传统的模块之间调用,一步步的升级为 SpringCloud 模块之间的调用,此篇文章为第九篇,即介绍 Stream 消息驱动。 二、消息驱动概念 2.1 消息驱动是什么 官方定义 Spring …

JavaScript的事件

JavaScript的事件 先写一个test测试函数以查看事件是否触发 function test(){var ddocument.getElementById("tid");console.log("测试成功"d) //控制台输出 }onclick 鼠标单击事件&#xff1a; <input type"button" id"tid" va…

学习通刷视频刷题脚本及安装使用过程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装插件二、复制脚本文件链接三、启动脚本四、登录学习通&#xff08;切记一倍速就行不然被封哦&#xff09;五、最好先把答题关掉先刷视频 前言 解决学习…

Winform编程详解四:ComboBox 下拉列表框

一、属性介绍 1. (Name) 控件的对象标识符ID 2. Items 组合框中的集合项 3. BackColor 控件的背景颜色 4. Cursor 鼠标移过该控件显示的光标样式 5. DropDownStyle 组合框的下拉样式和功能 6. FlatStyle 控件的外观 7. Font 控件的字体样式 8. ForeColor 控件的文本颜…

AI技术崛起:数据可视化之路更近

在当今AI技术蓬勃发展的时代&#xff0c;数据可视化作为信息传达的重要手段&#xff0c;其门槛逐渐降低。然而&#xff0c;这并不意味着我们可以忽视学习数据可视化的重要性。即使不需要深入专业技术&#xff0c;对数据可视化的基础知识的了解也是至关重要的。那么&#xff0c;…

02-Java变量和运算符

1. 基本数据类型转换&#xff08;Conversion&#xff09; 在Java程序中&#xff0c;不同的基本数据类型的值经常需要进行相互转换。Java语言所提供的七种数值类型之间可以相互转换&#xff0c;基本数据类型转换有两种转换方式&#xff1a;自动类型转换和强制类型转换。boolean…

金口诀排盘 api接口

接口平台&#xff1a;https://api.yuanfenju.com 开发文档&#xff1a;https://doc.yuanfenju.com/liupan/jinkoujue.html 支持格式&#xff1a;Form-data 请求方式&#xff1a;HTTP POST/GET <?php//您的密钥 $api_secret "wD******XhOUW******pvr"; //请求…

react面试题总结

1、当调用 setState的时候&#xff0c;发生了什么操作&#xff1f; 当调用 setState时&#xff0c; React做的第一件事是将传递给setState的对象合并到组件的当前状态&#xff0c;这将启动一个称为和解&#xff08; reconciliation&#xff09;的过程。 和解的最终目标是&#…

代码随想录算法训练营第59天|496.下一个更大元素II 42.接雨水

496.下一个更大元素II 这道题特殊的点在于它有点像环&#xff0c;后面的元素可以再从前面的元素找&#xff0c;我看了卡哥的视频&#xff0c;卡哥是根据取模来取的&#xff0c;但是他会多了没必要的赋值&#xff0c;我还是按照我最初的想法写吧&#xff0c;我是跟之前单调区间一…

java之mybatis语法

1、增加&#xff08;Insert&#xff09;&#xff1a; xml <insert id"insertUser" parameterType"User">INSERT INTO user (id, name, age) VALUES (#{id}, #{name}, #{age}) </insert> 对应Java代码&#xff1a;java sqlSession.insert(&quo…

Dubbo 的配置总线:抓住 URL,就理解了半个 Dubbo

概述 在互联网领域&#xff0c;每个信息资源都有统一的且在网上唯一的地址&#xff0c;该地址就叫 URL&#xff08;Uniform Resource Locator&#xff0c;统一资源定位符&#xff09;&#xff0c;它是互联网的统一资源定位标志&#xff0c;也就是指网络地址。 URL 本质上就是…

嵌入式摄像头,获取视频要通过进程通讯?

大体来说&#xff1a; 前几天同事突然对我说&#xff0c;摄像头问题很大。我听了一愣&#xff1a;这摄像头多么成熟的技术&#xff0c;各种代码都有&#xff0c;怎么就有问题了&#xff1f;他解释了一番&#xff0c;大意是&#xff0c;实际上摄像头被camera进程完全控制。比如…

【C++从练气到飞升】03---构造函数和析构函数

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书。 目录 ⛳️推荐 一、类的6个默认成员函数 二、构造函数 1. 构造函数的概念 2. 构造函数的定义 3. 构造函数的特性 三、析构函…

MySQL MHA故障切换

目录 一、案例分析 1.1、案例概述 1.2、案例前置知识点 1&#xff09;什么是 MHA 2&#xff09;MHA 的组成 3&#xff09;MHA 的优势 4&#xff09;MHA 现状 1.3、案例环境 1&#xff09;本案例环境 ​编辑 2&#xff09;案例需求 3&#xff09;案例实现思路…

CSS进阶空间转换和 less

<html> <head> <meta charset"UTF-8" /> <title>空间转换</title> </head> <body> <!-- 空间转换 空间&#xff1a;是从坐标轴角度定义的X,Y,和Z三条坐标轴构成一个立体空间 Z轴位置与视线方向相同 空间转换也叫3D转…

01——LenNet网络结构,图片识别

目录 1、model.py文件 &#xff08;预训练的模型&#xff09; 2、train.py文件&#xff08;会产生训练好的.th文件&#xff09; 3、predict.py文件&#xff08;预测文件&#xff09; 4、结果展示&#xff1a; 1、model.py文件 &#xff08;预训练的模型&#xff09; impor…

OceanBase中分区的运用

分区的概念 分区实质上是根据特定的规则&#xff0c;将表划分为若干个独立的物理存储单位。以MySQL为例&#xff0c;表会被拆分为多个物理文件。而在OceanBase​​​​​​​中&#xff0c;每个分区则表现为一个物理副本组&#xff0c;每个分区默认都拥有三个副本。 分区表的优…

lqb省赛日志[8/37]-[搜索·DFS·BFS]

一只小蒟蒻备考蓝桥杯的日志 文章目录 笔记DFS记忆化搜索 刷题心得小结 笔记 DFS 参考 深度优先搜索(DFS) 总结(算法剪枝优化总结) DFS的模板框架: function dfs(当前状态){if(当前状态 目的状态){}for(寻找新状态){if(状态合法){vis[访问该点]&#xff1b;dfs(新状态);?…

一道题学会如何使用哈希表

给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#xff1a;nums [1,2,3], …

视频素材哪里有?这几个高清无水印素材库看看

关于短视频素材&#xff0c;我知道大家都在找那种能让人一看就心旷神怡的地方&#xff0c;尤其是我们自媒体人&#xff0c;更是离不开这些优质的短视频素材来吸引观众的眼球。别着急&#xff0c;今天我就给大家安利几个网站&#xff0c;保证让你找到满意的短视频素材。 1&…