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

Mysql:事务管理(中)

在前面的章节中我们提到了MVCC多版本并发控制它巧妙地通过“版本快照”解决了“读-写”冲突实现了非阻塞读。但如果两个事务同时执行 UPDATE 操作修改同一行数据即写-写Write-Write场景快照就没用了。这时候MySQL 必须亮出它的铁腕手段——锁机制。一、写-写冲突的核心问题更新丢失想象一下这个场景初始状态账户余额 100 元。事务 A取出 100 元准备扣款。它先读到 100然后执行 100 - 100 0。事务 B同一时刻取出 50 元也先读到 100执行 100 - 50 50。结果如果事务 A 先提交事务 B 后提交B 的结果50元会覆盖 A 的结果0元。银行莫名其妙亏了 50 元。这种现象就叫“更新丢失”。二、MySQL 的解决方案排他锁X锁为了防止更新丢失InnoDB 存储引擎采用了行级锁Row-level Locking。当一个事务准备修改UPDATE/DELETE一条记录时它会先尝试获取该行的排他锁Exclusive Lock简称 X 锁。如果事务 A 拿到了锁它就可以进行修改。如果事务 B 也想修改发现 X 锁已被 A 占用事务 B 必须进入阻塞等待状态直到事务 A 提交或回滚释放了锁。结论在“写-写”场景下事务是串行化执行的。只有拿到锁的事务才能操作。三、更新丢失的两个分类在数据库理论中更新丢失分为两类。1.第一类更新丢失回滚丢失一个事务的回滚把另一个已经提交的事务更新的数据给覆盖了。在 InnoDB 中这种情况绝对不会发生。因为UPDATE会加排他锁X 锁事务 B 在事务 A 回滚之前根本无法修改该行数据。2.第二类更新丢失覆盖丢失一个事务基于旧数据计算新值并提交覆盖了另一个事务已经提交的更新。这是最常见的更新丢失。虽然数据库有锁但如果程序逻辑是“先读出来在内存计算再写回去”锁也救不了。四、四大隔离级别下的写-写场景在 InnoDB 中为了防止“脏写Dirty Write”所有的隔离级别在修改数据时都会加锁。也就是说如果事务 A 正在修改某行事务 B 想改同一行必须得等 A 提交或回滚。1. 读未提交RU 读提交RC在这两个级别下写-写冲突的表现最直接锁定单行只要事务 A 执行了 UPDATE该行就会被加上记录锁Record Lock。事务 B 的表现必须阻塞等待直到 A 释放锁。区别在这两个级别下MySQL 基本只锁住被修改的那些行。2. 可重复读RR/串行化Serializable作为 MySQL 的默认级别RR 在写操作上比 RC “霸道”得多。间隙锁Gap Lock与 Next-Key LockRR 不仅锁住存在的记录还会锁住记录之间的“间隙”。写-写冲突升级在 RC 下如果事务 A 修改了 ID10 的行事务 B 还可以插入 ID11 的新行。在 RR 下如果事务 A 的写操作涉及范围比如 WHERE id 5它会把整个范围都锁住。此时事务 B 想插入 ID11 的记录也会被阻塞。目的这是为了从根本上解决“幻读”问题确保写操作的区间安全。而串行化全线加锁读也不让读。以上两种的区别在于RU/RC无法解决幻读而RR/Serializable可以。比如select * from Roles whereid 5;RU/RC下仍可以插入而RR/Serializable禁止插入杜绝了两次搜索不一样的情况。五、写-写死锁的情况1.典型死锁场景转账假设有用户 1 和用户 2两人同时互相转账。死锁产生。2.解决方案在代码层进行“ID 排序”无论谁给谁转账我们的业务逻辑都强制要求先锁 ID 小的再锁 ID 大的。这样当事务 A 和事务 B 同时发生时它们都会先去争抢 id1 的锁。谁抢到了谁先走没抢到的就在第一行等着而不会去占着第二行的锁。这就变“环路等待”为“顺序排队”了。修改后的逻辑接收到转账请求 (id11, id22)。排序发现 1 2。执行 UPDATE ... WHERE id 1;执行 UPDATE ... WHERE id 2;

相关文章:

Mysql:事务管理(中)

在前面的章节中,我们提到了 MVCC(多版本并发控制),它巧妙地通过“版本快照”解决了“读-写”冲突,实现了非阻塞读。但如果两个事务同时执行 UPDATE 操作修改同一行数据,即 写-写(Write-Write&am…...

MongoDB Limit 与 Skip 方法详解

MongoDB Limit 与 Skip 方法详解 引言 MongoDB 是一个高性能、可伸缩的文档存储系统,它提供了强大的数据存储和查询功能。在处理大量数据时,Limit 与 Skip 方法是 MongoDB 中常用的查询优化工具。本文将详细介绍 MongoDB 中的 Limit 与 Skip 方法,包括其基本用法、性能影响…...

XML 服务器

XML 服务器 引言 XML(可扩展标记语言)服务器在现代互联网技术中扮演着至关重要的角色。它为数据的传输和处理提供了灵活且高效的方式。本文将深入探讨XML服务器的概念、工作原理、应用场景及其在软件开发中的重要性。 什么是XML服务器? XML服务器是一种用于存储、处理和…...

人类防伪指南:为什么你越写错字,HR越信你是真人?

前言各位码农、算法侠、CtrlC/V十级学者请注意:你有没有过这样的经历?辛辛苦苦肝了一晚上文档,逻辑严密、语法丝滑、连Markdown都对齐得像军训方阵,结果老板幽幽来一句:“这真是你自己写的?”那一刻&#x…...

skills CANN开源社区贡献技能包开发指南

前言 开源社区的健康运转,不仅依赖核心代码的贡献,还需要降低贡献门槛、提供清晰的指南和自动化工具。skills仓库是CANN开源社区的"贡献技能包",提供了一系列辅助脚本、代码模板、CI检查和文档生成工具,帮助新手快速上…...

AI算力要上天?别笑,太空数据中心真能干翻地球电费!

前言你有没有算过,训练一个大模型,相当于烧掉多少吨煤?如今AI狂飙突进,算力需求指数级增长,可地球上的电——不够用了!更别说建个数据中心还得跟地方政府“斗智斗勇”,抢地皮、配储能、扛审批&a…...

巧用对称性与平均值原理:低成本实现高精度电阻分压器校准

1. 项目概述:用数学思维突破测量设备的精度极限在电子实验室里捣鼓精密电路,尤其是涉及到电压基准、信号调理或者高精度ADC前端时,一个绕不开的坎就是精密分压器。你可能在设计一个需要0.1%甚至更高精度的分压网络,但手头的万用表…...

大佬推荐的网络安全学习路线(从基础到高级,超级详细)

大佬推荐的网络安全学习路线(从基础到高级,超级详细) 说起网络安全,你可能会担心它是一个过时的行业。有人说,网络安全快卷死了,你既要攻又要防,并且随着技术的发展,你还要不断地学…...

广州因特智能:AI视觉软硬结合,打破半导体检测装备“卡脖子”困境

【导语:广州因特智能科技孵化于西安电子科技大学广州研究院,专注用AI视觉技术解决工业场景的“卡脖子”检测难题,为半导体、光通信、新能源三大领域提供高端检测装备。】校地合作孵化,构建完整能力体系广州因特智能科技由西安电子…...

AI圈神秘领袖Ilya一幅画引爆全网,OpenAI三件大事暗示AGI时代将至?

AI圈神秘精神领袖Ilya在Instagram上传一幅画引发疯狂解读,与此同时,OpenAI连续公布数学成果、升级Codex、筹备IPO,释放AGI到来的强烈信号。Ilya画作引猜测Ilya上传的画中,罗丹的「思考者」踩在芯片Die Shot上,右下角签…...

股票买卖最佳时机:LeetCode121题解

题目LeetCode121给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取…...

【紧急预警】Lindy衰减临界点已提前至第8.3个月!2024最新《营销自动化寿命健康度白皮书》限时开放前500份

更多请点击: https://kaifayun.com 第一章:Lindy衰减临界点的理论重构与实证突破 Lindy效应传统上描述“越老越长寿”的非线性生存规律,但其在现代软件系统、开源生态与协议层技术栈中的适用边界正遭遇结构性挑战。本文首次将Lindy模型从静…...

ssm207基于SSM的视频播放系统的设计与实现+vue(文档+源码)_kaic

第五章 系统的实现5.1 用户功能模块的实现5.1.1系统主界面用户进入本系统可查看系统信息,系统主界面展示如图5.1所示。图5.1网站主界面5.1.2视频详情界面用户可选择视频查看视频详情信息,并可进行视频播放操作,视频详情界面展示如图5.2所示。…...

GEO生成引擎优化:当AI成为信息分发的主角,品牌如何抢占对话窗口?

当用户不再"搜索-浏览",而是直接"AI提问-获取答案",传统SEO的逻辑正在被彻底改写。2026年,GEO(Generative Engine Optimization,生成式引擎优化)已经从概念走向规模化落地。本文从技术…...

2026长沙智能家居品牌实测,这些本地老牌值得选

2026年,长沙的智能家居市场已经从“概念热”转向“落地战”。我走访了长沙多个本地服务商,实测了不同品牌在别墅、酒店、大平层等场景的真实表现。今天,结合数据与案例,分享几个值得关注的本地品牌,尤其是深耕8年以上的…...

翻译 GDB 官方文档

翻译 GDB 官方文档项目地址官方文档地址下载源码包编译html运行翻译程序项目地址 https://github.com/shootercheng/gdb-translate.git 项目结构 $ tree -L 1 . ├── cmd ├── go.mod ├── input ├── internal ├── LICENSE ├── output ├── README.md ├─…...

网络配置工具类详解

CNet 网络配置工具类详解平台:仅支持 Linux,大量使用 ioctl 系统调用一、概述 CNet 是一个 纯静态方法的网络配置工具类,封装了 Linux 下常用的网络操作:功能类别涵盖内容IP 地址读取/设置本机 IP、子网掩码网关读取/添加/删除/设…...

神经网络与深度学习 第3周课程总结

深度学习视觉应用课程总结 一、常用计算机视觉数据集数据集名称发布方/年份规模图像规格类别数主要用途核心特点MNIST美国国家标准与技术研究院60k训练10k测试2828灰度图10类(0-9手写数字)入门级图像分类最经典的手写数字识别基准数据集Fashion-MNISTZalando(2017)60k训练10k测…...

Airtest Poco实战:5分钟搞定微信小程序自动化测试环境搭建与元素抓取

Airtest Poco实战:5分钟搞定微信小程序自动化测试环境搭建与元素抓取微信小程序作为轻量级应用的代表,已经渗透到电商、社交、工具等各个领域。随着小程序功能的日益复杂,自动化测试成为保障产品质量的重要手段。本文将带你快速搭建微信小程序…...

从“DOC/PDF”到“WPS”:细看GJB438C-2021文档格式要求背后的国产化信号与落地指南

从“DOC/PDF”到“WPS”:GJB438C-2021文档格式变革的深度解读与实施策略 当一份国家军用标准在文档格式描述中刻意删除"DOC/PDF"字样,转而明确标注"(WPS)文档处理器"时,这绝非简单的技术参数调整。…...

如何快速批量下载高质量歌词:ZonyLrcToolsX跨平台终极解决方案

如何快速批量下载高质量歌词:ZonyLrcToolsX跨平台终极解决方案 【免费下载链接】ZonyLrcToolsX ZonyLrcToolsX 是一个能够方便地下载歌词的小软件。 项目地址: https://gitcode.com/gh_mirrors/zo/ZonyLrcToolsX 还在为本地音乐库缺少歌词而烦恼吗&#xff1…...

告别CAJ格式困扰:3分钟学会用开源工具将知网文献转为PDF

告别CAJ格式困扰:3分钟学会用开源工具将知网文献转为PDF 【免费下载链接】caj2pdf Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF。佛系转换,成功与否,皆是玄学。 项目地址: https://gitcode.com/…...

2027考研全套资料免费分享

备战27考研最全备考资料整理完毕,一路走来深知备考搜集资料耗费大量时间,浪费不少精力。特意整理2027考研全科完整版资源,全部打包汇总,零基础考生直接拿来就能使用,省去四处搜集资料的烦恼。资料内含:&…...

Unity UI交互进阶:手把手教你打造一个支持单击、双击、长按的万能按钮组件

Unity UI交互进阶:手把手教你打造一个支持单击、双击、长按的万能按钮组件在游戏开发中,UI交互的流畅性和多样性直接影响玩家的游戏体验。想象一下,当你在开发一个RPG游戏的背包系统时,需要实现道具的单击查看详情、双击快速使用、…...

第三卷第4章:原型模式设计思想

第三卷第4章:原型模式设计思想 目录介绍 01.案例引入与思考 1.1 痛点场景 1.2 它哪里不舒服 1.3 引出本篇主角 02.原型模式介绍 2.1 原型模式由来 2.2 原型模式定义...

DragonBones与Godot集成:骨骼动画的可编程化实践

1. 为什么在Godot里用DragonBones不是“锦上添花”,而是“绕不开的刚需” 去年上线一个横版动作手游Demo时,美术团队交来一套20个角色、每个角色含8套动画(待机/跑动/跳跃/攻击/受击/死亡/闪避/必杀)的Spine资源。我兴冲冲导入God…...

Godot4 2D游戏开发避坑指南:TileMap绘制、节点顺序与相机设置的三个常见问题

Godot4 2D游戏开发避坑指南:TileMap绘制、节点顺序与相机设置的三个常见问题当你第一次用Godot4完成一个2D场景搭建时,那种成就感往往会被几个突如其来的bug瞬间击碎——角色神秘消失、背景纹丝不动、屏幕边缘出现诡异黑边。这些问题看似简单&#xff0c…...

CANoe诊断测试没CDD文件怎么办?手把手教你用Fault Memory窗口和CAPL脚本读取解析DTC故障码

CANoe诊断测试无CDD文件的实战解决方案:从Fault Memory到CAPL脚本全解析当CDD文件缺失或定义不清晰时,诊断测试工程师常常陷入困境。本文将深入探讨如何利用Fault Memory窗口的基础功能,并通过CAPL脚本实现更灵活、更强大的故障码读取与解析方…...

从游戏引擎到仿真平台:手把手教你用AirSim+UE4搭建你的第一个无人机/自动驾驶仿真环境

从游戏引擎到仿真平台:构建AirSimUE4无人机与自动驾驶仿真环境实战指南当游戏引擎遇上机器人算法测试,会碰撞出怎样的火花?微软开源的AirSim项目将虚幻引擎(Unreal Engine)从游戏开发领域引入到自动驾驶和无人机研究的…...

电信运营商每月处理海量工单,如何不再出错?基于AI Agent的端到端自动化解决方案

在2026年的电信行业,海量工单处理已不再仅仅是效率问题,而是合规与生存的底线。随着2026年5月20日《电信和互联网服务 基础电信企业网上营业厅服务规范》国家标准的正式实施,监管层对“信息透明、流程闭环、计费精准”的要求达到了前所未有的…...