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

MySQL事务完整入门笔记:从基础到并发隔离级别

前言

在开发业务系统时,转账、订单扣库存、支付回调这类场景绝对离不开事务。如果不使用事务,一旦程序中途崩溃,就会出现数据错乱、资金丢失等严重问题。本文结合课程目录,从零梳理 MySQL 事务全套知识点,包含实操、ACID、并发脏问题、四大隔离级别,适合 Java 后端初学者一次性吃透事务。

一、什么是事务(事务简介)

1. 事务定义

Transaction(事务)是一组不可分割的 SQL 操作单元,这一组操作要么全部执行成功,要么全部执行失败回滚,不存在中间状态。

2. 典型业务场景:转账

账户表account存在张三、李四两条数据,初始余额均为 1000。 需求:张三转给李四 1000 元,需要两条 SQL:

-- 1. 张三扣款 update account set money=money-1000 where name='张三'; -- 2. 李四加钱 update account set money=money+1000 where name='李四';

如果不使用事务:第一条执行成功、第二条程序崩溃,张三钱被扣、李四没收到,数据出现永久性错误。 将两条 SQL 放进同一个事务,就能保证两条语句同时生效或同时撤销。

3. 引擎限制

MySQL 中只有InnoDB 引擎支持事务;MyISAM 引擎不支持事务,无法回滚。

二、事务基础操作演示

1. 核心开关:自动提交 autocommit

MySQL 默认autocommit=1(自动提交开启),每一条增删改语句执行后立刻永久入库,无法回滚。

-- 查看自动提交状态 select @@autocommit; -- 关闭自动提交,开启手动事务模式 set autocommit = 0;

2. 事务两大核心指令

  1. commit;提交事务:所有修改永久写入数据库,事务结束,无法回滚

  2. rollback;回滚事务:撤销当前事务内所有未提交修改,数据恢复原样

3. 完整实操示例

-- 关闭自动提交 set autocommit = 0; -- 转账操作 update account set money=money-1000 where name='张三'; update account set money=money+1000 where name='李四'; -- 确认无异常则提交 commit; -- 若出现异常,执行回滚撤销所有修改 -- rollback;

实操坑点提醒

若先执行commit,事务已经结束,后续写rollback不会有任何效果,数据无法恢复。

三、事务四大核心特性 ACID

事务必须同时满足 4 个特性,简称 ACID,是面试高频考点:

  1. 原子性 Atomic事务是最小执行单元,不可拆分。一组操作要么全成功,要么全失败回滚。转账扣款和加钱一定同时生效 / 同时撤销。

  2. 一致性 Consistency事务执行前后,整体数据逻辑合法。转账前两人总余额 2000,事务结束后总余额依旧 2000,不会凭空多 / 少资金。

  3. 隔离性 Isolation多个事务并发操作同一张表时,事务之间互相隔离,每个事务看不到其他事务未提交的中间脏数据,避免并发错乱。

  4. 持久性 Durability一旦执行commit提交事务,修改永久存入磁盘,服务器断电、重启、崩溃都不会丢失数据。

四、并发事务带来的三类数据问题

多用户同时操作数据库(并发事务)时,隔离性不足会产生三类异常,严重影响业务准确性:

1. 脏读 Dirty Read

事务 A 读取到事务 B 未提交、最终回滚作废的数据,读到虚假无效数据。 示例:事务 B 修改张三余额为 0 但未提交,事务 A 读到余额 0;随后 B 回滚,余额恢复 1000,A 拿到的 0 是脏数据。

2. 不可重复读 Non-Repeatable Read

同一个事务内,两次读取同一行数据,中间被其他事务修改并提交,两次查询结果不一致。 核心:同一行记录的值发生变化(update 操作)。 示例:事务 A 第一次查张三余额 1000;事务 B 扣款提交;A 再次查询余额变成 0,同一事务两次读数不同。

3. 幻读 Phantom Read

同一个事务内,两次相同条件批量查询,中间其他事务新增 / 删除数据并提交,两次查询行数不一致,像凭空多出 / 消失数据。 核心:符合条件的记录条数变化(insert/delete 操作)。 示例:事务 A 查询余额大于 0 的账户,查到 2 条;事务 B 新增王五账户并提交;A 再次查询得到 3 条,仿佛出现幻觉。

三者快速区分

  • 脏读:读到别人回滚作废的未提交数据

  • 不可重复读:同一行数据的值被修改

  • 幻读:符合条件的记录行数增减

五、并发事务演示 & 四大隔离级别

MySQL 提供 4 种事务隔离级别,从低到高逐步解决脏读、不可重复读、幻读,隔离级别越高并发性能越差。

隔离级别

脏读

不可重复读

幻读

读未提交 Read Uncommitted

存在

存在

存在

读已提交 Read Committed(Oracle 默认)

解决

存在

存在

可重复读 Repeatable Read(MySQL InnoDB 默认)

解决

解决

存在

串行化 Serializable

全部解决

全部解决

全部解决

各隔离级别说明

  1. 读未提交:性能最高,所有并发问题都存在,业务几乎不用。

  2. 读已提交:只能读取其他事务已提交的数据,杜绝脏读,但重复读、幻读依旧存在。

  3. 可重复读(MySQL 默认):同一个事务内多次读取数据,结果始终保持一致,解决脏读、不可重复读;仅存在幻读。依靠 MVCC 多版本并发控制实现。

  4. 串行化:最高隔离级别,所有事务串行排队执行,无并发冲突,三类问题全部消除,但并发性能极差,极少使用。

隔离级别操作命令

-- 查看当前会话隔离级别 select @@transaction_isolation; -- 设置会话隔离级别 set session transaction isolation level read committed;

六、事务整体小结

  1. 事务核心作用:保证一组业务 SQL 操作原子执行,避免数据错乱,转账、库存、支付场景必备;

  2. 基础操作:关闭自动提交set autocommit=0commit提交、rollback回滚;

  3. 四大特性 ACID:原子、一致、隔离、持久,是事务的标准规范;

  4. 并发三大问题:脏读、不可重复读、幻读,由事务并发引发;

  5. 四大隔离级别:逐级解决并发问题,MySQL 默认使用「可重复读」平衡性能与数据安全;

  6. 注意事项:DDL 语句(create/alter/drop)会强制自动提交当前事务,无法回滚。

http://www.jsqmd.com/news/1197212/

相关文章:

  • 计算机专业实习避坑指南:从渠道筛选到项目实战的进阶之路
  • Python小白的数学建模课-12.有限差分法进阶:从一维到二维的偏微分方程实战
  • 宝玑中国官方售后服务中心|服务热线及全部维修详细地址权威信息声明(2026年7月更新) - 亨得利钟表维修中心
  • FreeRTOS任务创建与调度机制详解
  • Ubuntu 18.04下基于RoadRunner与UE4构建高性能CARLA仿真地图全流程
  • 从城市节点到国际出口:一张图看懂中国骨干网的真实架构
  • 豆包、DeepSeek回答里的Mermaid流程图怎么导出?保留源代码并转成Word或PDF的方法 - 【DS随心转】
  • Android Activity - Intent 数据传递(基础数据类型、字符串与字符序列、数组类型、集合类型、Parcelable 对象、Serializable 对象)
  • 影刀RPA 数据分组汇总:分类统计与交叉报表
  • 储能容量优化配置, 遗传算法+cplex迭代求解综合能源双层规划 综合能源系统储能容量双层优化配置(遗传算法+CPLEX)
  • Django CMS 完整指南:5个步骤快速搭建企业级内容管理系统
  • 2026年7月最新亨得利官方服务项目及价格查询|维修地址与客服电话权威信息通知 - 亨得利官方
  • LSTM如何缓解梯度消失:门控机制与梯度流动原理详解
  • 三个AI项目杀疯了!学习效率办公全给你包了
  • PYNQ-Z2开发板:Python与FPGA的硬件加速实践
  • Matlab中使用FFT分析噪声信号的频率成分
  • 3分钟学会多平台同步直播:obs-multi-rtmp插件终极配置指南
  • SMUDebugTool:AMD Ryzen处理器底层调试与超频控制技术解析
  • C++语法入门实战:信奥赛学习路径与核心模块精讲
  • ADV7612四通道HDMI多路复用方案设计与应用
  • echart中tooltip与legend中的formatter
  • 2026年美业收银系统评测:八家主流品牌功能、价格与适用场景全面对比 - 资讯焦点
  • 从省三到国奖:我的微信小程序应用开发赛进阶复盘与选题策略
  • 2026 年新消息:泾川正规的危险品证延期厂家哪家好,证期到了?这5个操作让你绕开漫长等待 - 品质体验官
  • Unity 2D物理旋转控制:Rigidbody 2D与Rotation避坑指南
  • G-Helper:华硕笔记本性能控制革命性指南 - 突破性轻量级解决方案深度解析
  • FSearch:Linux系统毫秒级文件搜索的终极解决方案
  • UART串口通信:从物理层到协议层的实战解析
  • (2026最新)淮北防水补漏本地人必选的正规靠谱公司推荐-房屋漏水检测维修师傅上门-卫生间/厨房/阳台/房顶/外墙漏水检测精准测漏 - 即刻修防水
  • 智能电子表格:Airtable、Vika、NocoDB、teable、APITable