MySQL的事务是什么?原理、ACID、隔离级别与实战详解
事务是MySQL InnoDB引擎最核心的能力也是后端开发面试高频考点。转账、下单、扣库存等业务都离不开事务。本文用通俗语言讲清楚事务是什么、解决什么问题、ACID四大特性、隔离级别、常见坑点。一、什么是事务事务Transaction是把多条SQL打包成一个不可分割的执行单元。单元内所有SQL全部执行成功执行commit提交修改永久生效任意一步失败执行rollback回滚撤销所有修改回到执行之前的状态。简单一句话同生共死要么全成要么全败。生活案例转账用户A给用户B转账200元需要两条update语句A的余额减少200B的余额增加200如果没有事务第一条执行成功服务器宕机/程序报错第二条没有执行。结果A钱扣掉了B没有收到钱产生脏数据。开启事务之后只要第二步失败第一步的扣款操作就会全部撤销不会出现中间异常状态。⚠️注意只有InnoDB引擎支持事务MyISAM引擎不支持事务commit、rollback不会生效。二、事务四大特性 ACIDACID是事务必须满足的四个核心属性面试必背。原子性Atomicity事务是最小执行单元内部操作不可拆分。全部成功或者全部失败回滚不会停留在中间状态。转账不能只扣钱不加钱。一致性Consistency事务执行前后业务数据整体合法一致。转账前后AB总金额不变不会凭空多出或者消失资金。原子性、隔离性、持久性最终都是为了保证一致性。隔离性Isolation多个事务并发执行互相之间要做到互相隔离。一个事务看不到另外一个事务未提交的数据。多个同事同时操作同一笔账户不能读到别人还没提交的中间临时数据。隔离性由事务隔离级别控制。持久性Durability事务一旦commit提交成功修改永久保存到磁盘即使数据库宕机、断电数据也不会丢失。依靠InnoDB redo log重做日志实现。三、MySQL事务核心命令手动SQL层面操作事务-- 方式1开启事务STARTTRANSACTION;-- 执行多条DML语句 update / insert / deleteupdateaccountsetbalancebalance-200whereusernameA;updateaccountsetbalancebalance200whereusernameB;-- 全部成功提交事务COMMIT;-- 如果出错回滚所有修改ROLLBACK;START TRANSACTION开启事务COMMIT提交持久化修改ROLLBACK回滚撤销本次事务所有变更SAVEPOINT 保存点名称设置保存点可以局部回滚不用全部回滚ROLLBACK TO SAVEPOINT xxx回滚到指定保存点。MySQL默认autocommitON每执行一条update/insert/delete就自动commit相当于每条SQL自己就是一个独立事务。想要手动控制事务需要关闭自动提交。-- 关闭自动提交SETautocommit0;四、事务的4种隔离级别并发场景下不同隔离级别用来解决3种读现象脏读、不可重复读、幻读。隔离级别脏读不可重复读幻读READ UNCOMMITTED读未提交允许允许允许READ COMMITTED读已提交 RC禁止允许允许REPEATABLE READ可重复读 RRMySQL默认禁止禁止允许InnoDB通过MVCC解决幻读SERIALIZABLE串行化禁止禁止禁止三种并发问题通俗解释脏读一个事务读到另一个事务还没有提交的数据如果对方回滚读到的数据就是无效脏数据。不可重复读同一个事务内同一条SQL前后查询中间被其他事务提交修改导致两次查询结果不一样。重点是数据内容被修改。幻读同一个事务两次范围查询别的事务插入/删除数据导致前后返回行数不一样。重点是行数变化。MySQL InnoDB 默认隔离级别是REPEATABLE READ依靠MVCC多版本并发控制在RR级别解决幻读问题。查看当前隔离级别SELECTtransaction_isolation;设置隔离级别SETSESSIONTRANSACTIONISOLATIONLEVELREADCOMMITTED;五、代码层面简单示例pymysqlimportpymysql connpymysql.connect(host127.0.0.1,userroot,passwordxxx,databasetest_db,charsetutf8mb4)# 关闭自动提交开启手动事务conn.autocommitFalsecurconn.cursor()try:cur.execute(update account set balancebalance-200 where username%s,(A,))cur.execute(update account set balancebalance200 where username%s,(B,))conn.commit()print(事务提交成功)exceptExceptionase:conn.rollback()print(f事务回滚异常{e})finally:cur.close()conn.close()六、什么时候必须使用事务✅适合使用事务场景转账、资金交易创建订单同时扣减库存多表关联写入、更新多条操作必须同时成功业务逻辑要求多条SQL整体生效。❌不需要事务场景单条insert/update/delete纯查询select语句查询不会修改数据。七、开发常见坑忘记关闭autocommit自动提交打开时commit/rollback无效每条SQL直接落库。长事务事务开启之后迟迟不commit/rollback。会占用锁、回滚段造成大量锁等待数据库性能暴跌。事务粒度尽量小。事务使用不同connection连接同一个事务所有SQL必须使用同一个连接对象换连接就是全新事务。MyISAM引擎用事务MyISAM不支持事务commit/rollback调用没有效果。异常捕获不执行rollback发生异常不回滚事务挂起持续持有行锁。DDL语句create/alter/drop会隐式提交当前事务DDL执行后前面的修改直接提交无法回滚。⚠️重点提醒执行ALTER TABLE等DDL会触发隐式commit会把之前未提交的事务直接提交这个坑线上经常踩。八、总结事务是InnoDB引擎提供的能力把多条SQL打包保证要么全成功要么全失败。ACID四大特性原子性、一致性、隔离性、持久性。4种隔离级别用来控制并发读写行为MySQL默认RR可重复读。业务写操作尽量缩小事务范围拒绝长事务异常必须rollback。DDL语句会隐式提交事务写代码要格外注意。事务不是为了加快查询速度而是保证数据一致性防止业务产生脏数据。很多线上资金故障根源就是没有合理使用事务。

相关新闻

Windows系统优化终极指南:三分钟让电脑焕然一新的神奇工具

Windows系统优化终极指南:三分钟让电脑焕然一新的神奇工具

Windows系统优化终极指南:三分钟让电脑焕然一新的神奇工具 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 你是否厌倦了Windows系…

2026/10/4 13:45:57 阅读更多 →
OBS多平台直播完整指南:obs-multi-rtmp免费一键同步推流终极教程

OBS多平台直播完整指南:obs-multi-rtmp免费一键同步推流终极教程

OBS多平台直播完整指南:obs-multi-rtmp免费一键同步推流终极教程 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 你是否想过一键同时直播到YouTube、Twitch、Bilibili等多个…

2026/10/4 13:45:15 阅读更多 →
如何3步实现飞书文档批量导出:告别手动下载的终极自动化方案

如何3步实现飞书文档批量导出:告别手动下载的终极自动化方案

如何3步实现飞书文档批量导出:告别手动下载的终极自动化方案 【免费下载链接】feishu-doc-export 飞书文档导出服务 项目地址: https://gitcode.com/gh_mirrors/fe/feishu-doc-export 你是否曾经为迁移企业知识库而烦恼?当团队在飞书上积累了数百…

2026/10/4 15:20:15 阅读更多 →

最新新闻

企业智能体平台落地攻略:五条工程化路径破解生产难题

企业智能体平台落地攻略:五条工程化路径破解生产难题

搞企业智能体平台这件事,我见过太多团队在Demo阶段兴高采烈,一进生产环境就卡壳。明明大模型调用、Prompt、工作流这些单点技术都能跑通,但一接企业真实数据、真实流程、真实账号体系,问题就全冒出来了:召回不准、权限…

2026/10/5 14:53:24 阅读更多 →
普通游戏电脑跑125B大模型?Strata分层卸载实战全解析

普通游戏电脑跑125B大模型?Strata分层卸载实战全解析

先说实话,两个月前如果有人告诉我,一张游戏显卡能把 1250 亿参数的大模型跑起来,我大概率会觉得这人要么喝多了,要么就是想把我的 3090 骗去挖矿。125B 这个体量,传统认知里怎么也得是 A100、H100 这种企业级卡才配得动…

2026/10/5 14:53:24 阅读更多 →
从零构建AI工程:RAG、Agent与质量保障实战路线

从零构建AI工程:RAG、Agent与质量保障实战路线

1. 从零开始:先搞懂AI工程到底在做什么这半年多,我一直在折腾一个叫 ai-engineering-from-scratch 的项目,目标是纯手工打通“从零开始做AI工程”这件事。之所以想写下来,是因为我发现多数人一上来就调大模型API,能跑通…

2026/10/5 14:53:24 阅读更多 →
从零开始AI工程实践:从技术选型到模型部署完整指南

从零开始AI工程实践:从技术选型到模型部署完整指南

1. 为什么我决定从零开始啃下AI工程大概半年前,我意识到一个很尴尬的事实:自己虽然能跑通各种开源模型的demo,也能照着教程调通几个分类任务,但一旦脱离现成脚本,面对一个真实的业务问题——数据是乱的、样本是偏的、线…

2026/10/5 14:53:24 阅读更多 →
openrig 配置编排:用 YAML 统一管理 Claude Code 与 Codex 的本地模型接入

openrig 配置编排:用 YAML 统一管理 Claude Code 与 Codex 的本地模型接入

1. openrig 到底是个什么东西第一次看到 openrig 这个名字,我下意识以为是某个硬件机架项目,毕竟 rig 在英文里常指设备支架、钻机或者测试台。但结合 Claude Code、Codex、YAML、Node.js 这几个热搜词一起看,方向就很清楚了——这是一个围绕…

2026/10/5 14:52:23 阅读更多 →
Gröbner基入门核心:项序与约化的原理、选择与避坑

Gröbner基入门核心:项序与约化的原理、选择与避坑

1. 为什么学Grbner基,得先啃下“项序”这块硬骨头?你打开一本代数几何教材,翻到Grbner基那一章,第一行就写着:“设 ≺ 是一个单项式序……”——然后整页都是符号和定义。你合上书,心里发虚:这玩…

2026/10/5 14:52:23 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 20:14:29 阅读更多 →