MySQL 事务详解:ACID 特性、隔离级别与实践
事务是数据库操作的基本单位,确保一组 SQL 语句要么全部成功执行,要么全部失败回滚,是保证数据一致性的核心机制。MySQL 中仅 InnoDB 存储引擎支持事务,本文详细解析事务的特性、隔离级别及实际应用。
事务的基本概念
事务(Transaction):由一个或多个 SQL 语句组成的执行单元,具备 “原子性”—— 要么所有语句执行成功(提交),要么全部失败(回滚),不存在部分执行的情况。
- 支持情况:MySQL 中只有
InnoDB引擎支持事务(MyISAM、MEMORY 等引擎不支持)。 - 典型场景:转账操作(扣减 A 账户金额 + 增加 B 账户金额,两步必须同时成功或失败)。
事务的 ACID 特性
事务的四大核心特性(ACID)是保证数据可靠性的基础:
| 特性 | 含义说明 | 示例 |
|---|---|---|
| 原子性(Atomicity) | 事务是不可分割的最小单位,操作要么全执行,要么全不执行。 | 转账时,若扣减 A 账户后系统崩溃,B 账户不会增加金额(事务回滚,恢复 A 账户)。 |
| 一致性(Consistency) | 事务执行前后,数据库从一个一致性状态切换到另一个一致性状态(数据规则不变)。 | 转账前 A+B 总金额为 1000,转账后总金额仍为 1000(不会多增或少减)。 |
| 隔离性(Isolation) | 多个事务并发执行时,彼此不干扰,每个事务感觉不到其他事务的存在。 | 事务 1 查询余额时,事务 2 的转账操作不会影响事务 1 的查询结果(隔离级别决定影响程度)。 |
| 持久性(Durability) | 事务提交后,对数据的修改永久生效,即使系统崩溃也不会丢失。 | 事务提交后,数据写入磁盘,重启数据库后修改仍存在。 |
事务的创建与控制
MySQL 默认开启 “自动提交”(autocommit=ON),即每条 SQL 语句自动作为一个事务提交。如需手动控制事务,需先关闭自动提交。