当前位置: 首页 > news >正文

MySQL 中有哪几种锁?

在 MySQL 中,锁(Locks)是为了保证数据的一致性和完整性而设计的机制。常见的锁可以从粒度操作类型两个角度分类。以下是详细介绍:


粒度 分类

1. 全局锁
  • 描述:锁定整个数据库实例。
  • 用途:主要用于备份,如 FLUSH TABLES WITH READ LOCK (FTWRL)
  • 特点
    • 整个数据库处于只读状态。
    • 对性能影响较大,通常不建议在线使用。
2. 表级锁
  • 描述:锁定整个表,防止其他线程对表进行操作。
  • 类型
    • 表锁:使用 LOCK TABLES 语句显式加锁。
    • 元数据锁(MDL, Metadata Lock)
      • 自动加锁,例如 ALTER TABLE 时。
      • 防止表结构在读写操作时被修改。
  • 特点
    • 并发性较低,因为锁住了整个表。
3. 行级锁
  • 描述:对特定行记录加锁,主要由 InnoDB 引擎支持。
  • 优点:粒度最小,并发性能高。
  • 实现方式
    • 基于索引加锁。如果没有索引,行锁会退化为表锁。
  • 适用场景:高并发环境。

操作类型 分类

1. 共享锁(S 锁,Shared Lock)
  • 描述:允许多个事务同时读取,但禁止写入。
  • 使用方式:通过 SELECT ... LOCK IN SHARE MODE 显式加锁。
  • 适用场景
    • 需要读取数据并防止数据被其他事务修改时。
    • 例如检查数据后基于条件执行写操作。
2. 排他锁(X 锁,Exclusive Lock)
  • 描述:一个事务持有排他锁后,其他事务不能再读取或修改该记录。
  • 使用方式:通过 FOR UPDATE 显式加锁,或隐式加锁(如 INSERTUPDATE)。
  • 适用场景
    • 修改数据时确保线程安全。

意图 分类(InnoDB 专属)

为了提高加锁效率,InnoDB 提供了意向锁(Intent Locks),与表锁结合使用:

  • 意向共享锁(IS 锁):事务准备在某行加共享锁前先获取表的 IS 锁。
  • 意向排他锁(IX 锁):事务准备在某行加排他锁前先获取表的 IX 锁。
  • 作用:快速判断是否能对整张表加锁,避免扫描整表。

其他特殊锁

1. 间隙锁(Gap Lock)
  • 描述:锁住索引间隙,而不是具体的行。
  • 用途:防止幻读问题,保证事务的可重复读(REPEATABLE READ)。
  • 场景:例如在范围查询中,锁住范围内不存在的记录。
2. 临键锁(Next-Key Lock)
  • 描述:行锁 + 间隙锁的组合。
  • 用途:解决可重复读(REPEATABLE READ)隔离级别下的幻读问题。
3. 自增锁(AUTO-INC Lock)
  • 描述:对含有自增列的表加特殊锁,保证自增列的生成顺序。
  • 特点:独占锁,直到当前事务完成。
4. 死锁检测锁
  • 描述:通过检测锁的相互等待关系来判断是否存在死锁。

总结

  • 全局锁:适用于全局操作,如备份。
  • 表级锁:适用于表的结构变更或全表操作。
  • 行级锁:适用于高并发写入。
  • 间隙锁和临键锁:解决幻读问题。
  • 意向锁:优化加锁性能。

在实际开发中,应根据场景选择适当的锁类型,以平衡数据一致性和并发性能。

相关文章:

MySQL 中有哪几种锁?

在 MySQL 中,锁(Locks)是为了保证数据的一致性和完整性而设计的机制。常见的锁可以从粒度和操作类型两个角度分类。以下是详细介绍: 按 粒度 分类 1. 全局锁 描述:锁定整个数据库实例。用途:主要用于备份…...

kafka中节点如何服役和退役

节点服役(添加新节点) 1.准备新节点: 安装 Kafka 和相关依赖。 配置 Kafka Broker 的 server.properties 文件,确保 broker.id 是唯一的,并且配置正确的 zookeeper.connect 地址。 重启网卡 2.启动新节点&#xff…...

HTML5实现剪刀石头布小游戏(附源码)

文章目录 1.设计来源1.1 主界面1.2 皮肤风格1.2 游戏中界面 2.效果和源码源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/143798520 HTM…...

集群聊天服务器(3)muduo网络库

目录 基于muduo的客户端服务器编程 muduo只能装在linux中,依赖boost库 客户端并不需要高并发 基于muduo的客户端服务器编程 支持epoll线程池,muduo封装了线程池 而且还有完善的日志系统 使用muduo库代码非常固定,基本就只有chatserver的类名…...

解决在Ubuntu 20.04中使用PyCharm时无法输入中文的问题

解决在Ubuntu 20.04中使用PyCharm时无法输入中文的问题 要解决在Ubuntu 20.04中使用PyCharm时无法输入中文的问题,特别是当使用IBus作为输入法框架时,我们需要通过设置适当的环境变量来确保PyCharm可以正确调用IBus输入法。下面将详细说明原因及解决步骤…...

【jvm】HotSpot中方法区的演进

目录 1. 说明2. JDK1.6及以前3. JDK1.74. JDK1.8及以后 1. 说明 1.在HotSpot虚拟机中,方法区(Method Area)的演进是一个重要的内存管理优化过程。2.从JDK1.6到JDK1.8,HotSpot虚拟机中的方法区经历了从永久代到元空间的重大变化。…...

Win10/11 安装使用 Neo4j Community Edition

如果你下载的是 Neo4j Community Edition 的压缩包,意味着你需要手动解压并配置 Neo4j。以下是详细的使用步骤: 0. 下载压缩包 访问Neo4j官网,找到 Community Edition 版本并选择 4.x 或者 5.x 下载:https://neo4j.com/deployme…...

Ubuntu 22.04 上快速搭建 Samba 文件共享服务器

Samba 简介 Samba 是一个开源软件,它扮演着不同操作系统间沟通的桥梁。通过实现 SMB(Server Message Block)协议,Samba 让文件和打印服务在 Windows、Linux 和 macOS 之间自由流动。 以下是 Samba 的特点: 跨平台兼…...

JQuery 基础知识学习(详尽版)2024.11.17

一、jQuery简介及使用详解 1.1 jQuery简介 写更少的代码,做更多的事;jQuery可以做:HTML 元素选取 , HTML 元素操作 ,CSS 操作 ,HTML 事件函数 ,JavaScript 特效和动画 ,HTML DOM 遍…...

Spring Validation参数校验

Validation Validation是Spring提供的一个参数校验框架&#xff0c;使用预定义的注解完成参数校验 使用步骤 引入Spring Validation起步依赖在需要校验的参数所在的类上添加Validated注解在需要校验的参数前面加上Pattern注解 <!--参数校验依赖--><dependency>&l…...

高斯数据库Postgresql死锁和锁表解决方法

解决死锁进方法&#xff1a; 查询死锁进程列表 select * from pg_stat_activity where waiting‘t’ 发现有好几条挂起的记录&#xff0c;记录下所有或需要解锁的pid 解决死锁进程 select pg_cancel_backend(‘pid值’) 解决完后&#xff0c;刷新后测试&#xff0c;恢复正…...

【设计模式】模板方法模式 在java中的应用

设计模式&#xff1a; 设计模式是对软件设计中普遍存在&#xff08;反复出现&#xff09;的各种问题&#xff0c;所提出的解决方案。这个术语是由Erich Gamma等人在1995年的书《设计模式&#xff1a;可复用面向对象软件的基础》中首次引入的。设计模式可以加快开发过程&#x…...

PVE纵览-安装系统卡“Loading Driver”的快速解决方案

PVE纵览-安装系统卡“Loading Driver”的快速解决方案 文章目录 PVE纵览-安装系统卡“Loading Driver”的快速解决方案摘要通过引导参数解决PVE安装卡在“Loading Driver”问题官方解决方法 关键字&#xff1a; PVE、 显卡、 Loading、 Driver、 nomodeset 摘要 在虚拟机…...

Lua资料

Lua脚本语言 cheet sheet Lua & c Lua与C API交互全面解析 Lua语言&#xff1a;和C语言的交互 Lua进阶用法之Lua和C的接口设计 Lua C API 简介 C和Lua之间的相互调用 深入Lua&#xff1a;用户数据userdata 基本数据类型 之 UserData calling-lua-from-c/ Embedding Lua i…...

【C语言】值传递和地址传递

值传递 引用传递&#xff08;传地址&#xff0c;传引用&#xff09;的区别 传值&#xff0c;是把实参的值赋值给行参 &#xff0c;那么对行参的修改&#xff0c;不会影响实参的值。 传地址&#xff0c;是传值的一种特殊方式&#xff0c;只是他传递的是地址&#xff0c;不是普通…...

PyTorch 中使用自动求导计算梯度

使用 PyTorch 进行自动求导和梯度计算 在 PyTorch 中&#xff0c;张量的 requires_grad 属性决定了是否需要计算该张量的梯度。设置为 True 的张量会在计算过程中记录操作&#xff0c;以便在调用 .backward() 方法时自动计算梯度。通过构建计算图&#xff0c;PyTorch 能够有效…...

Oracle Instant Client 23.5安装配置完整教程

Oracle Instant Client 23.5安装配置完整教程 简介环境要求安装步骤1. 准备工作目录2. 下载Oracle Instant Client3. 解压Instant Client4. 安装依赖包5. 配置系统环境5.1 配置库文件路径5.2 配置环境变量 6. 配置Oracle钱包&#xff08;可选&#xff09; 验证安装常见问题解决…...

【jvm】方法区的理解

目录 1. 说明2. 方法区的演进3. 内部结构4. 作用5.内存管理 1. 说明 1.方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码缓存等数据。它是各个线程共享的内存区域。2.尽管《Java虚拟机规范》中把方法区描述为堆的一个逻辑部分&#xff0c;但它却…...

ES-针对某个字段去重后-获取某个字段值的所有值

针对上面表的数据&#xff0c;现在想根据age分组&#xff0c;并获取每个分组后的name有哪些(去重后)。 select age, GROUP_CONCAT(DISTINCT(name)) from testtable group by age ; 结果&#xff1a; 如果想要增加排序&#xff1a; SELECT age, GROUP_CONCAT(DISTINCT name)…...

百度 2025届秋招提前批 文心一言大模型算法工程师

文章目录 个人情况一面/技术面 1h二面/技术面 1h三面/技术面 40min 个人情况 先说一下个人情况&#xff1a; 学校情况&#xff1a;211本中9硕&#xff0c;本硕学校都一般&#xff0c;本硕都是计算机科班&#xff0c;但研究方向并不是NLP&#xff0c;而是图表示学习论文情况&a…...

sglang 部署Qwen2VL7B,大模型部署,速度测试,深度学习

sglang 项目github仓库&#xff1a; https://github.com/sgl-project/sglang 项目说明书&#xff1a; https://sgl-project.github.io/start/install.html 资讯&#xff1a; https://github.com/sgl-project/sgl-learning-materials?tabreadme-ov-file#the-first-sglang…...

fastadmin操作数据库字段为json、查询遍历each、多级下拉、union、php密码设置、common常用函数的使用小技巧

数据库中遇到的操作 查询字段是json的某个值 //获取数据库中某个字段是json中得某个值&#xff0c;进行查询&#xff0c;goods是表中字段&#xff0c;brand_id是json中要查詢的字段。//数据类型一定要对应要不然查询不出来。$map[json_extract(goods, "$.brand_id")]…...

UniApp在Vue3的setup语法糖下自定义组件插槽详解

UniApp在 Vue3的 setup 语法糖下自定义组件插槽详解 UniApp 是一个基于 Vue.js 的跨平台开发框架&#xff0c;可以用来开发微信小程序、H5、App 等多种平台的应用。Vue 3 引入了 <script setup> 语法糖&#xff0c;使得组件的编写更加简洁和直观。本文将详细介绍如何在 …...

springboot上传下载文件

RequestMapping(“bigJson”) RestController Slf4j public class TestBigJsonController { Resource private BigjsonService bigjsonService;PostMapping("uploadJsonFile") public ResponseResult<Long> uploadJsonFile(RequestParam("file")Mul…...

Python学习从0到1 day29 Python 高阶技巧 ⑦ 正则表达式

目录 一、正则表达式 二、正则表达式的三个基础方法 1.match 从头匹配 2.search&#xff08;匹配规则&#xff0c;被匹配字符串&#xff09; 3.findall&#xff08;匹配规则&#xff0c;被匹配字符串&#xff09; 三、元字符匹配 单字符匹配&#xff1a; 注&#xff1a; 示例&a…...

机器学习-web scraping

Web Scraping&#xff0c;通常称为网络抓取或数据抓取&#xff0c;是一种通过自动化程序从网页中提取数据的技术。以下是对Web Scraping的详细解释&#xff1a; 一、定义与原理 Web Scraping是指采用技术手段从大量网页中提取结构化和非结构化信息&#xff0c;并按照一定的规…...

移远通信5G RedCap模组RG255C-CN通过中国电信5G Inside终端生态认证

近日&#xff0c;移远通信5G RedCap模组RG255C-CN荣获中国电信颁发的5G Inside终端生态认证证书。这表明&#xff0c;该产品在5G基本性能、网络兼容性、安全特性等方面已经过严格评测且表现优异&#xff0c;将进一步加速推动5G行业终端规模化应用。 中国电信5G Inside终端生态认…...

Javaweb梳理17——HTMLCSS简介

Javaweb梳理17——HTML&CSS简介 17 HTML&CSS简介17.1 HTML介绍17.2 快速入门17.3 基础标签17.3 .1 标题标签17.3.2 hr标签17.3.3 字体标签17.3.4 换行17.3.8 案例17.3.9 图片、音频、视频标签17.3.10 超链接标签17.3.11 列表标签17.3.12 表格标签17.3.11 布局标签17.3.…...

【Android、IOS、Flutter、鸿蒙、ReactNative 】自定义View

Android Java 自定义View 步骤 创建一个新的Java类&#xff0c;继承自View、ViewGroup或其他任何一个视图类。 如果需要&#xff0c;重写构造函数以支持不同的初始化方式。 重写onMeasure方法以提供正确的测量逻辑。 重写onDraw方法以实现绘制逻辑。 根据需要重写其他方法&…...

win11跳过联网激活步骤

win11跳过联网激活步骤 win11跳过联网激活步骤方法一&#xff1a;使用Shift F10快捷键&#xff08;推荐&#xff09;1. 启动Windows 112. 选择键盘布局或输入法3. 是否想要添加第二种键盘布局4. 让我们为你连接到网络5. 调出管理员模式CMD6. 耐心等待自动重启7. 启动Windows 1…...

小城市门户网站建设方案/北京互联网公司排名

项目经理这个“神圣”的词汇来源于西方&#xff0c;是PM(Project Manager&#xff09;的中文译法。这说明了两个问题&#xff0c;第一&#xff0c;项目经理这个职位来源于西方的管理学体系。第二&#xff0c;项目经理所做的工作方法具有西方的管理学的某种特质。理解好这两个体…...

重庆梁平网站建设哪家好/互联网线上推广

作者▕ IT修真院编审▕ 暗灭编辑▕ 匹诺曹本文共3500字&#xff0c;预计阅读需要20分钟课程大纲第一阶段——HTML及CSS入门任务一&#xff1a;九宫格——用htmlcss制作一个网页1、盒模型、常见元素分类、调试如何理解盒模型及其content、padding、border、margin&#xff1f;常…...

阿里企业邮箱免费注册/珠海seo排名收费

PowerShell 异常处理参考文章&#xff1a; &#xff08;1&#xff09;PowerShell 异常处理 &#xff08;2&#xff09;https://www.cnblogs.com/sparkdev/p/8376747.html 备忘一下。...

一个公司如何把网站做好/第三方网站流量统计

先点击"科学舍"&#xff0c;再点击“关注”&#xff0c;这样您就可以免费收到我们的最新内容了&#xff0c;每天都会有更新&#xff0c;完全是免费订阅&#xff0c;请放心关注。本文转自网络&#xff0c;著作权属归原创者所有。如有侵权&#xff0c;请联系我们删除。…...

网站 实例/广告联盟代理平台

一&#xff1a;说在前头我的第一份工作是做生产工具&#xff0c;当时用的MFC&#xff0c;IDE是VC6.0&#xff0c;现在想想真是古董级别&#xff0c;10年至今&#xff0c;微软也一直没有对MFC进行升级&#xff0c;冥冥中感觉微软自己都放弃MFC了&#xff0c;市场上貌似MFC的岗位…...

在北京哪家公司建网站合适/通州优化公司

二毛道家源流经典之一《黄帝内经》主张“食为性命之基”&#xff0c;并提倡“五谷为养&#xff0c;五果为助&#xff0c;五畜为益&#xff0c;五菜为充”。如果饮食不当&#xff0c;五味不调&#xff0c;饮食亦为疾病之源&#xff0c;主张通过对食物的挑选、搭配&#xff0c;达…...