MySQL事务的ACID特性指原子性、一致性、隔离性、持久性:原子性通过undo log实现全提交或全回滚;一致性由约束与逻辑共同保障数据合法;隔离性依赖MVCC与锁机制防止并发异常;持久性靠redo log确保提交后数据不丢失。

MySQL事务的ACID特性,是指事务必须具备的四个核心属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。这四个特性共同保障了数据库在并发操作和异常情况下仍能正确、可靠地处理数据。
原子性(Atomicity)
事务是一个不可分割的最小执行单元,其中的所有操作要么全部成功提交,要么全部回滚失败,不会出现部分执行的情况。
- MySQL通过undo log实现原子性:执行过程中记录反向操作日志,一旦发生错误或显式执行ROLLBACK,系统利用undo log将数据恢复到事务开始前的状态
- START TRANSACTION开启事务,COMMIT提交,ROLLBACK撤销——这三个语句共同构成原子性控制边界
- 注意:单条SQL默认自动提交(autocommit=1),需先设SET autocommit = 0,再手动管理事务,才能体现原子性效果
一致性(Consistency)
事务执行前后,数据库必须从一个合法状态转换到另一个合法状态,始终满足预定义的约束规则(如主键、外键、唯一性、CHECK条件等)。
- 一致性是应用逻辑与数据库约束共同保障的结果,不是由某一种机制单独实现的
- 例如转账操作中,A扣款100元、B加款100元,总金额不变;若中途崩溃,原子性和持久性配合确保不会出现“钱凭空消失”或“重复入账”
- 外键约束、触发器、应用层校验都参与维持一致性,但MySQL本身不自动修复业务逻辑错误
隔离性(Isolation)
多个并发事务相互隔离,一个事务的中间状态对其他事务不可见,避免脏读、不可重复读和幻读等问题。
- MySQL默认隔离级别为REPEATABLE READ,通过MVCC(多版本并发控制)+间隙锁(Gap Lock)解决大部分并发问题
- 四种标准隔离级别对应不同可见性规则:red">READ UNCOMMITTED(可读未提交,有脏读)、READ COMMITTED(读已提交,无脏读但可能不可重复读)、REPEATABLE READ(可重复读,MySQL默认,解决不可重复读,配合间隙锁防幻读)、SERIALIZABLE(串行化,最高隔离,但性能最低)
- 可通过SELECT @@transaction_isolation;查看当前会话隔离级别,用SET SESSION TRANSACTION ISOLATION LEVEL ...动态调整
持久性(Durability)
事务一旦提交,其结果将永久保存在数据库中,即使系统崩溃也不会丢失。
- MySQL主要依靠redo log(重做日志)保证持久性:事务提交时,先将变更写入redo log buffer,再刷盘到redo log文件,最后才更新Buffer Pool中的数据页
- 崩溃恢复时,MySQL通过重放redo log,把已提交但尚未写入磁盘的数据页重新构建出来
- innodb_flush_log_at_trx_commit参数控制刷盘策略:值为1(默认)表示每次提交都刷盘,最安全;0或2会牺牲一定安全性换取性能










