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

📅 2026/7/16 1:27:42
MySQL事务完整入门笔记:从基础到并发隔离级别
前言在开发业务系统时转账、订单扣库存、支付回调这类场景绝对离不开事务。如果不使用事务一旦程序中途崩溃就会出现数据错乱、资金丢失等严重问题。本文结合课程目录从零梳理 MySQL 事务全套知识点包含实操、ACID、并发脏问题、四大隔离级别适合 Java 后端初学者一次性吃透事务。一、什么是事务事务简介1. 事务定义Transaction事务是一组不可分割的 SQL 操作单元这一组操作要么全部执行成功要么全部执行失败回滚不存在中间状态。2. 典型业务场景转账账户表account存在张三、李四两条数据初始余额均为 1000。 需求张三转给李四 1000 元需要两条 SQL-- 1. 张三扣款 update account set moneymoney-1000 where name张三; -- 2. 李四加钱 update account set moneymoney1000 where name李四;如果不使用事务第一条执行成功、第二条程序崩溃张三钱被扣、李四没收到数据出现永久性错误。 将两条 SQL 放进同一个事务就能保证两条语句同时生效或同时撤销。3. 引擎限制MySQL 中只有InnoDB 引擎支持事务MyISAM 引擎不支持事务无法回滚。二、事务基础操作演示1. 核心开关自动提交 autocommitMySQL 默认autocommit1自动提交开启每一条增删改语句执行后立刻永久入库无法回滚。-- 查看自动提交状态 select autocommit; -- 关闭自动提交开启手动事务模式 set autocommit 0;2. 事务两大核心指令commit;提交事务所有修改永久写入数据库事务结束无法回滚rollback;回滚事务撤销当前事务内所有未提交修改数据恢复原样3. 完整实操示例-- 关闭自动提交 set autocommit 0; -- 转账操作 update account set moneymoney-1000 where name张三; update account set moneymoney1000 where name李四; -- 确认无异常则提交 commit; -- 若出现异常执行回滚撤销所有修改 -- rollback;实操坑点提醒若先执行commit事务已经结束后续写rollback不会有任何效果数据无法恢复。三、事务四大核心特性 ACID事务必须同时满足 4 个特性简称 ACID是面试高频考点原子性 Atomic事务是最小执行单元不可拆分。一组操作要么全成功要么全失败回滚。转账扣款和加钱一定同时生效 / 同时撤销。一致性 Consistency事务执行前后整体数据逻辑合法。转账前两人总余额 2000事务结束后总余额依旧 2000不会凭空多 / 少资金。隔离性 Isolation多个事务并发操作同一张表时事务之间互相隔离每个事务看不到其他事务未提交的中间脏数据避免并发错乱。持久性 Durability一旦执行commit提交事务修改永久存入磁盘服务器断电、重启、崩溃都不会丢失数据。四、并发事务带来的三类数据问题多用户同时操作数据库并发事务时隔离性不足会产生三类异常严重影响业务准确性1. 脏读 Dirty Read事务 A 读取到事务 B 未提交、最终回滚作废的数据读到虚假无效数据。 示例事务 B 修改张三余额为 0 但未提交事务 A 读到余额 0随后 B 回滚余额恢复 1000A 拿到的 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 CommittedOracle 默认解决存在存在可重复读 Repeatable ReadMySQL InnoDB 默认解决解决存在串行化 Serializable全部解决全部解决全部解决各隔离级别说明读未提交性能最高所有并发问题都存在业务几乎不用。读已提交只能读取其他事务已提交的数据杜绝脏读但重复读、幻读依旧存在。可重复读MySQL 默认同一个事务内多次读取数据结果始终保持一致解决脏读、不可重复读仅存在幻读。依靠 MVCC 多版本并发控制实现。串行化最高隔离级别所有事务串行排队执行无并发冲突三类问题全部消除但并发性能极差极少使用。隔离级别操作命令-- 查看当前会话隔离级别 select transaction_isolation; -- 设置会话隔离级别 set session transaction isolation level read committed;六、事务整体小结事务核心作用保证一组业务 SQL 操作原子执行避免数据错乱转账、库存、支付场景必备基础操作关闭自动提交set autocommit0commit提交、rollback回滚四大特性 ACID原子、一致、隔离、持久是事务的标准规范并发三大问题脏读、不可重复读、幻读由事务并发引发四大隔离级别逐级解决并发问题MySQL 默认使用「可重复读」平衡性能与数据安全注意事项DDL 语句create/alter/drop会强制自动提交当前事务无法回滚。