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/8/10 17:11:10 阅读更多 →
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/8/10 17:11:10 阅读更多 →
如何3步实现飞书文档批量导出:告别手动下载的终极自动化方案

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

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

2026/8/10 17:11:10 阅读更多 →

最新新闻

DevOps Interview Guide中的告警策略:减少噪音的最佳实践

DevOps Interview Guide中的告警策略:减少噪音的最佳实践

DevOps Interview Guide中的告警策略:减少噪音的最佳实践 【免费下载链接】DevOps-Interview-Guide DevOps Interview Guide 项目地址: https://gitcode.com/GitHub_Trending/de/DevOps-Interview-Guide 在DevOps和SRE领域,有效的告警策略是保障…

2026/8/10 17:55:35 阅读更多 →
YDoc 目录结构详解:如何科学组织你的 Markdown 文档

YDoc 目录结构详解:如何科学组织你的 Markdown 文档

YDoc 目录结构详解:如何科学组织你的 Markdown 文档 【免费下载链接】ydoc 🐶YDoc 是一个更懂你的文档站构建工具,基于 markdown 轻松生成完整静态站点 项目地址: https://gitcode.com/gh_mirrors/yd/ydoc YDoc 是一个更懂你的文档站构…

2026/8/10 17:55:35 阅读更多 →
biniou vs 主流AI工具:为什么自托管WebUI是创作者的终极选择?

biniou vs 主流AI工具:为什么自托管WebUI是创作者的终极选择?

biniou vs 主流AI工具:为什么自托管WebUI是创作者的终极选择? 【免费下载链接】biniou a self-hosted webui for 30 generative ai 项目地址: https://gitcode.com/gh_mirrors/bi/biniou 在AI创作工具层出不穷的今天,创作者们常常面临…

2026/8/10 17:55:35 阅读更多 →
DevOps Interview Guide中的边缘计算:分布式系统面试重点

DevOps Interview Guide中的边缘计算:分布式系统面试重点

DevOps Interview Guide中的边缘计算:分布式系统面试重点 【免费下载链接】DevOps-Interview-Guide DevOps Interview Guide 项目地址: https://gitcode.com/GitHub_Trending/de/DevOps-Interview-Guide 在DevOps和SRE面试中,边缘计算与分布式系…

2026/8/10 17:55:35 阅读更多 →
大厂 MCP 面试实录:提示注入防控与超时、重试、可观测性协同设计

大厂 MCP 面试实录:提示注入防控与超时、重试、可观测性协同设计

大厂 MCP 面试实录:提示注入防控与超时、重试、可观测性协同设计 本文采用模拟面试复盘形式,围绕「防止提示注入诱导 MCP Tool 执行高风险操作」的业务场景,考察候选人对 MCP 安全边界、异常治理与可观测性的综合落地能力。面试官&#xff1a…

2026/8/10 17:55:35 阅读更多 →
为什么Heroku-buildpack-static被弃用?替代方案与迁移策略完整解析

为什么Heroku-buildpack-static被弃用?替代方案与迁移策略完整解析

为什么Heroku-buildpack-static被弃用?替代方案与迁移策略完整解析 【免费下载链接】heroku-buildpack-static [DEPRECATED] Heroku buildpack for handling static sites and single page web apps 项目地址: https://gitcode.com/gh_mirrors/he/heroku-buildpac…

2026/8/10 17:54:35 阅读更多 →

日新闻

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南 【免费下载链接】graphql-css A blazing fast CSS-in-GQL™ library. 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-css GraphQL-CSS是一个基于GraphQL的CSS-in-GQL™库&#xff0…

2026/8/10 0:00:02 阅读更多 →
告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南 【免费下载链接】kiss-translator A simple, open source bilingual translation extension & Greasemonkey script (一个简约、开源的 双语对照翻译扩展 & 油猴脚本) 项目地址: https://gitcode.com/…

2026/8/10 0:00:02 阅读更多 →
BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案 【免费下载链接】BepInEx.ConfigurationManager Plugin configuration manager for BepInEx 项目地址: https://gitcode.com/gh_mirrors/be/BepInEx.ConfigurationManager 你是否曾经因为游戏插件的复杂…

2026/8/10 0:00:02 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/10 1:05:29 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/10 1:05:29 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/10 1:05:29 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/10 1:05:29 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →