进阶-锁章节

一、MySQL进阶

当10万用户同时抢购限量商品,库存却显示为负数——这不是技术故障,而是锁机制失效的悲剧。”
在2025年数据库故障报告中,68%的高并发系统崩溃源于锁设计缺陷。作为数据库工程师,你无法回避一个核心问题:如何在保障数据一致性的同时,让系统吞吐量飙升?

1. 锁

1.1 为何锁是数据库的“生死线”?——背景深度剖析

在电商、金融等高并发场景中,数据不一致的代价远超想象:

问题业务影响事故案例
库存超卖用户支付成功但无货,导致退款率飙升某电商大促期间损失1200万元
数据丢失事务中断导致关键记录缺失银行转账系统因锁冲突丢失5000笔交易
性能暴跌阻塞式锁引发线程饥饿10万QPS系统响应时间从20ms→500ms

为什么必须掌握锁?

  • 数据一致性是底线:ACID中的“一致性”(Consistency)依赖锁机制实现。
  • 性能与安全的平衡点:锁粒度越小(行级),并发越高;锁粒度越大(全局),一致性越强。
  • 行业铁律:高并发系统中,锁设计不当是性能瓶颈的80%根源(2025年《数据库架构白皮书》)。

💡核心认知:锁不是“性能敌人”,而是保障数据安全的“最小成本”。没有锁,数据库就是一盘散沙。

1.2 锁的核心定义:数据库的“交通规则”

锁是数据库管理系统(DBMS)控制并发访问共享资源的机制,通过加锁(Lock)和解锁(Unlock)确保事务执行的隔离性(Isolation)。

关键特性

  • 排他性:一个事务持有锁时,其他事务无法修改数据。
  • 粒度:锁的范围(全局/表/行)决定并发能力。
  • 模式:共享锁(Read Lock,允许多事务读) vs. 排他锁(Write Lock,独占写)。

与存储函数/触发器的本质区别

  • 函数/触发器:封装逻辑,不改变数据状态
  • 直接控制数据访问,是并发安全的基石。

1.3 锁的全类型深度解析:从全局到行级

1. 全局锁(Global Lock)
  • 定义:锁定整个数据库实例,所有表变为只读
  • 语法
FLUSH TABLES WITH READ LOCK; -- 全库只读 UNLOCK TABLES; -- 解锁

DDL:操作数据库 / 表的结构(创建、修改、删除),代表语句CREATE/ALTER/DROP,执行后自动提交;

DML:操作表中的数据(增、删、改),代表语句INSERT/UPDATE/DELETE,可手动提交 / 回滚;

补充:SELECT属于 DQL(数据查询语言),是查询数据的核心语句,常和 DML 配合使用。

  • 使用场景
    • 全库逻辑备份(如mysqldump)。
    • 需要全局一致性快照的维护操作(如版本升级)。
  • 致命缺点

    阻塞所有写操作!生产环境严禁使用,会导致服务不可用。
    (实际案例:某公司因误用全局锁导致1小时宕机)

2. 表级锁(Table-level Lock)

表级锁是锁定整张表的锁机制,锁定粒度大,发生锁冲突的概率最高,并发度最低。它分为三类:表锁、元数据锁、意向锁

表锁(Table Lock)

定义:显式锁定整张表,分为共享读锁独占写锁。注意都是对外客户端来说

-- 加锁 LOCK TABLES 表名 READ; -- 共享读锁 LOCK TABLES 表名 WRITE; -- 独占写锁 -- 释放锁 UNLOCK TABLES;
锁类型允许其他事务操作阻塞其他事务操作适用场景
共享读锁读操作(SELECT)写操作(INSERT/UPDATE/DELETE)低并发报表查询
独占写锁无(仅当前事务可操作)读和写操作数据批量导入/导出

💡关键结论
读锁不阻塞读,但阻塞写;写锁阻塞所有操作。这是表锁的核心特性。

元数据锁(MDL, Meta Data Lock)

定义:系统自动控制的锁,无需显式使用,在访问表时自动添加,用于维护表元数据(表结构)的一致性。
由来:MySQL 5.5引入,为避免DML(数据操作)与DDL(数据定义)冲突。
作用:当表上有活动事务时,禁止修改表结构(如ALTER TABLE)。

锁类型与触发场景

锁类型触发操作与MDL锁的兼容性
MDL读锁SELECT、INSERT、UPDATE、DELETE允许多个MDL读锁共存
MDL写锁ALTER TABLE、DROP TABLE、CREATE INDEX与所有MDL锁互斥

典型场景

  • 当执行SELECT * FROM orders时,自动加MDL读锁。
  • 当执行ALTER TABLE orders ADD COLUMN new_col INT时,需等待所有MDL读锁释放。

💡核心价值
MDL锁是数据一致性与DDL操作的"守门人"。没有它,表结构变更会破坏正在执行的查询。

意向锁(Intention Locks)

定义:表级锁,表示事务打算对表中的某些行加锁,但不会直接锁定数据行本身。
由来:为了解决表锁与行锁冲突的问题(避免逐行检查行锁)。

下表线程A对表进行操作之后,对操作行3进行行锁锁定,此时会接着对这张表添加一个意向锁,线程B并发执行操作该表时,对这张表添加表锁,首先会去检查这张表是否意向锁和意向锁的类型,通过意向锁的决定能不能加锁成功,有意向锁时,此时操作会进入阻塞状态,直到线程A的意向锁行锁解锁时才进行操作。

意向锁类型

锁类型触发操作与表锁兼容性
意向共享锁(IS)SELECT ... LOCK IN SHARE MODE表共享读锁(read)兼容,与表独占写锁(write)互斥
意向排他锁(IX)INSERTUPDATEDELETESELECT ... FOR UPDATE表共享读锁和独占写锁都互斥
意向锁之间无冲突意向锁之间不会互斥(IS与IX兼容)

💡关键认知
意向锁是InnoDB行锁与表锁的"桥梁",它让表锁检查从"逐行扫描"优化为"快速判断",极大提升性能。

3. 行级锁

行级锁是锁定表中特定行的锁机制,由InnoDB存储引擎实现(MyISAM不支持行级锁)。
关键特性

  • 粒度最小:仅锁定需要操作的行,其他行可并发操作。
  • 基于索引:行级锁实际是加在索引记录上,而非数据行本身。
  • 自动管理:由InnoDB自动加锁,无需显式声明(除SELECT ... FOR UPDATE外)。
为什么是"基于索引"?

核心原理:行锁是索引锁,不是数据行锁

"InnoDB的行锁是通过索引项加锁实现的,不是直接对数据行加锁。"
这一特性决定了行锁的行为与索引设计息息相关。

关键结论

  • 必须使用索引:若查询未命中索引,InnoDB将升级为表锁(全表锁定)。
  • 索引键冲突:即使访问不同行,若使用相同索引键,也会发生锁冲突。
  • 执行计划影响:MySQL会根据执行计划决定是否使用索引,若全表扫描更高效,将使用表锁。

Record Lock(记录锁)
  • 定义:记录锁是锁定索引中的一条具体记录的锁。即使表没有定义索引,InnoDB 也会创建一个隐式的聚簇索引来锁定。

  • 作用:它是最基本的行锁,确保在事务结束前,其他事务无法修改或删除(某些情况下也无法读取,取决于隔离级别)这条被锁定的记录。

第一点: 共享锁之间是兼容的,共享锁与排他锁之间是互斥的。

第二点: 假如第一个事务获取到了某一行数据的排他锁,那么其他的事务就不能在获取这一行数据的共享以及排他锁。

对于我们一些常见的增删改查的一些操作分别加的是什么类型的行锁呢?

  • 示例

    -- 假设 id 是主键(或唯一索引) SELECT * FROM users WHERE id = 5 FOR UPDATE;

    如果id = 5这条记录存在,这条语句就会在id=5的索引记录上加一个记录锁。其他事务如果要UPDATEDELETE或以FOR UPDATE方式读取这条记录都会被阻塞。

关键结论
Record Lock是行级锁的基础,但无法解决范围查询中的幻读问题。

间隙锁(Gap Locks)
  • 定义:间隙锁是锁定索引记录之间的间隙,即一个区间,但不包括记录本身。它锁定的是“不存在记录的范围”。

  • 作用防止其他事务在间隙中插入新的记录,从而解决“幻读”问题。这是实现“可重复读”隔离级别的关键。

-- 假设 age 有一个普通索引,并且存在 age=10 和 age=20 的记录 SELECT * FROM users WHERE age = 15 FOR UPDATE;

由于age=15的记录不存在,这条语句会锁定(10, 20)这个开区间。此时,其他事务尝试插入age=12age=15age=18的记录都会被阻塞,但更新已存在的age=10的记录通常不受影响(除非该更新导致其移出此间隙)。

  • 重要特点

    • 间隙锁可以跨越单个、多个索引值,甚至是无限大(如(20, +∞))。

    • 间隙锁是“共享”的。多个事务可以在同一个间隙上持有间隙锁,目的都是为了防止插入。这不会冲突。

    • 唯一索引(或主键)的等值查询,如果记录不存在,也会加间隙锁。

临键锁(Next-Key Locks)
  • 定义:临键锁是记录锁和间隙锁的组合。它锁定一条索引记录以及该记录之前的间隙。它是一个左开右闭的区间(previous_record, current_record]

  • 作用:这是 InnoDB 在“可重复读”隔离级别下的默认行锁算法。它结合了记录锁和间隙锁的优点,既能锁定现有记录防止修改,又能锁定间隙防止插入,从而彻底避免幻读。

-- 假设 id 是主键,表中有 id=5, id=10, id=15 的记录 SELECT * FROM users WHERE id > 10 AND id <= 15 FOR UPDATE;

这条语句会锁定:

  1. 记录id=15(记录锁)

  2. 以及id=15之前的间隙(10, 15)(间隙锁)
    所以,它实际锁定的是临键锁区间(10, 15]

  • 其他事务不能修改id=15的记录。

  • 也不能在(10, 15)这个区间内插入任何新的记录(如id=12)。

  • 工作方式

    • 当使用索引进行范围查询或等值查询时,InnoDB 会扫描并锁定所有匹配的索引记录和间隙。

    • 对于最后一个扫描到的索引记录,其后的间隙也可能被锁定(如上例中id=15之后的(15, +∞)部分区间是否锁定取决于具体查询和索引)。

特性记录锁间隙锁临键锁
锁定对象单条索引记录记录之间的间隙(不锁记录)记录 + 其前的间隙(区间)
主要目的防止修改或删除已存在的记录防止在间隙中插入新记录(防幻读)两者兼防,实现完整的行锁保护
锁冲突与其它记录的记录锁/临键锁不冲突,与同记录的锁冲突。共享的,多个事务可持有同一间隙锁。但与插入操作冲突。与涉及该区间的记录锁、插入意向锁冲突。
常见触发场景对唯一索引进行等值查询且记录存在等值查询记录不存在,或范围查询。范围查询,或非唯一索引的等值查询(RR级别)。
与隔离级别关系所有支持行锁的隔离级别(RC, RR)主要是 RR 隔离级别,RC级别下一般禁用间隙锁以提升并发。RR 隔离级别的默认算法

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

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

相关文章

2025_NIPS_C-LoRA: Contextual Low-Rank Adaptation for Uncertainty Estimation in Large Language Models

文章核心总结与翻译 一、主要内容 文章针对低数据场景下大语言模型(LLM)微调时的过度自信问题,提出了上下文低秩适配(C-LoRA)方法。该方法基于贝叶斯框架,通过轻量级上下文模块实现数据依赖的不确定性估计,同时保持参数高效性。实验以LLaMA2-7B为基准,在6个常识推理数…

精益生产不是口号,中小企业上手最快的5类工具

很多中小企业老板一提精益生产就头疼&#xff1a; “理念我懂&#xff0c;可我们公司能用吗&#xff1f;员工少、订单杂、每天事情一堆……” 其实&#xff0c;精益生产并不是复杂软件或者大项目才做得到的事情。 关键在于把理念落到日常动作里&#xff0c;让每一步都清楚可执…

模组日志体系总体说明!

模组日志体系构建了一套完整的运行信息追踪机制&#xff0c;涵盖日志生成、分级管理、输出控制与存储策略等多个层面。该体系不仅实现对运行过程的可追溯性&#xff0c;还为故障诊断与性能优化提供了坚实的数据基础。 一、本文讨论的边界 本文是对 4G 模组&#xff0c; 以及 4…

深度测评8个AI论文写作软件,助本科生轻松搞定毕业论文!

深度测评8个AI论文写作软件&#xff0c;助本科生轻松搞定毕业论文&#xff01; AI 工具如何改变论文写作的未来 在当前的学术环境中&#xff0c;越来越多的本科生开始依赖 AI 工具来辅助完成毕业论文。这些工具不仅能够帮助学生快速生成初稿&#xff0c;还能在降低 AIGC 率、保…

2025全球AI大模型发展现状与趋势深度解析:从技术突破到产业应用全景图

全球AI市场预计2029年达1.26万亿美元&#xff0c;年复合增长率31.9%&#xff0c;生成式AI引领增长。技术从"能力"向"可用性"进化&#xff0c;GPT-5等模型实现突破性进展。投资聚焦AI Agent、垂直应用和基础设施。中美呈现"闭源vs开源"路线分化&a…

聚焦老龄化AI赋能 京能天云数据-智慧康养服务 APP重构老年健康管理新范式

在人口老龄化加速与 “人工智能 ” 战略深度落地的双重背景下&#xff0c;京能天云数据的智慧康养服务 APP 以适老化设计为基石&#xff0c;依托 AI 核心技术&#xff0c;构建覆盖情感陪伴、健康管理、安全防护、认知提升等全维度的智慧康养解决方案&#xff0c;为老年群体提供…

Agent的核心特质:自主决策、感知环境、持续交互

文章目录一、自主决策&#xff1a;Agent的“大脑”能力&#xff0c;也是最核心的特质先搞懂&#xff1a;什么是Agent的自主决策&#xff1f;举个程序员熟悉的例子&#xff1a;代码调试Agent的自主决策关键提醒&#xff1a;自主决策不是“瞎决策”二、感知环境&#xff1a;Agent…

学霸同款2026 AI论文网站TOP8:本科生毕业论文神器测评

学霸同款2026 AI论文网站TOP8&#xff1a;本科生毕业论文神器测评 2026年学术写作工具测评&#xff1a;为何选择这些AI论文网站&#xff1f; 随着人工智能技术的不断进步&#xff0c;越来越多的本科生开始依赖AI工具辅助毕业论文的撰写。然而&#xff0c;面对市场上琳琅满目的A…

超实用的追剪、定长切割与跟随切割项目分享

追剪&#xff0c;定长切割&#xff0c;跟随切割&#xff0c;PLC用的是西门子smart200&#xff0c;屏用的是smart700&#xff0c;是实际项目运行非常稳定&#xff0c;带堆放功能&#xff0c;报警功能&#xff0c;可提供CAD电气图&#xff0c;程序源代码&#xff0c;屏程序源代码…

AI智能体记忆系统完全指南:从形式、功能到动态的三维解析

本文提出了首个针对AI智能体记忆机制的统一分类体系&#xff0c;从形式(令牌级、参数化、潜在记忆)、功能(事实记忆、体验记忆、工作记忆)和动态(形成、演化、检索)三个维度解构了记忆系统&#xff0c;厘清了Agent Memory与RAG、Context Engineering的边界。该框架解决了当前研…

智能体 vs 人工智能:一文读懂AI落地的‘关键一公里‘(建议收藏)

智能体是基于大语言模型的计算实体&#xff0c;能自主感知环境、记忆、推理规划并调用工具完成任务。其技术架构包括感知、记忆、规划、执行四大模块&#xff0c;带来交互、协同、效率、服务四大变革。当前产业主战场为L3级智能体&#xff0c;面临生态协同、数实融合等挑战。20…

大模型转行完全指南:从小白到专家,从规划到AI的成功路径

本文分享了一位从规划行业转行至大模型领域专家的宝贵经验&#xff0c;涵盖转行动机、学习路径&#xff08;理论-实践-面试/比赛&#xff09;、转行策略&#xff08;选择风口、做好心理准备、系统学习、持续实践&#xff09;以及行业前景。专家强调大模型是"锤子"&am…

MLOps测试流水线:软件测试工程师的AI质量守护指南

一、MLOps测试的范式转变 相较于传统软件测试&#xff0c;ML系统面临三重核心挑战&#xff1a; 动态数据依赖&#xff1a;训练/推理数据的分布漂移&#xff08;如特征偏移、概念漂移&#xff09; 模型不确定性&#xff1a;相同输入可能产生概率性输出&#xff08;置信度波动&…

AI应用架构师的知识管理方法:如何高效积累和沉淀经验?

AI应用架构师的知识管理&#xff1a;从碎片到体系&#xff0c;像搭AI系统一样构建你的经验库 关键词 AI应用架构、知识管理、经验沉淀、体系化、隐性知识、工具链、复用性 摘要 作为AI应用架构师&#xff0c;你每天都在处理跨学科的技术决策&#xff08;模型选型工程实现业务适…

大模型产品经理学习路线图+免费资料,小白也能入门_大模型AI大模型产品经理学习路线

本文详细介绍了大模型产品经理的五阶段学习路线&#xff1a;基础知识&#xff08;计算机科学、AI/ML基础&#xff09;、大模型技术&#xff08;概览、训练优化&#xff09;、产品管理与商业分析、实战经验积累、持续学习与自我提升。文章还提供了丰富的免费学习资源&#xff0c…

AI测试数据集构建:工程化实践与质量保障体系

一、AI测试数据的独特性与挑战 与传统测试数据的本质差异 三维验证需求&#xff1a;模型精度、鲁棒性、伦理合规性&#xff08;如GDPR/《生成式AI服务管理办法》&#xff09; 对抗性样本必要性&#xff1a;FGSM攻击样本覆盖率需≥15%&#xff08;IEEE标准ISO/IEEE 29119-11:20…

DeepSeek + RAG 手把手实战:从 0 到 1 打造你的个人知识库助手(附 Python 源码)

作者&#xff1a;飞哥&#xff08;一位喜欢讲故事的全栈开发者&#xff0c;擅长把复杂的代码翻译成“人话”&#xff09; 阶段&#xff1a;GenAI 与大模型应用 关键词&#xff1a;RAG, Embedding, 向量数据库, 知识库问答大家好&#xff0c;我是飞哥。 前两周我们学会了让 AI “…

手把手教你用8款免费AI神器,从零到一轻松搞定毕业论文

面对毕业论文这座大山&#xff0c;你是否感到无从下手&#xff1f;从选题、找文献、搭框架到撰写、修改、降重&#xff0c;每一步都让无数学生感到焦虑。别担心&#xff0c;AI时代已经到来&#xff0c;借助强大的AI工具&#xff0c;你完全可以更高效、更轻松地完成这项任务。 …

实用工具个人备忘录

1.Windows Terminal 可以在window10里面分页新建终端。 2.MouseWithoutBorders&#xff0c;可以使得在同一网络下的不同电脑鼠标互通&#xff0c;方便同时操作两个设备。 3.WSL&#xff0c;Todesk&#xff0c;飞书好用 4.vscode插件&#xff1a;commenttranslate&#xff1a…

免费商用素材网站推荐榜2026:高性价比之选 top5 自媒体/中小微企业/电商

一、引言&#xff1a;免费商用素材需求激增&#xff0c;选型痛点凸显据艾瑞咨询《2025年中国数字创意素材行业研究报告》显示&#xff0c;国内自媒体从业者及中小微企业对免费商用素材的年需求量已突破8亿次&#xff0c;同比增长45%。但与此同时&#xff0c;行业内素材版权纠纷…