ACID是数据库事务的四大核心特性:原子性通过undo log保证操作全成功或全失败;一致性依赖约束与应用逻辑维持合法状态;隔离性用锁或MVCC防止并发干扰;持久性靠WAL(redo log)确保提交后数据不丢失。

ACID 是数据库事务的四个核心特性,分别对应 Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)。它们共同确保事务在并发、故障等复杂场景下仍能安全、可靠地执行。
原子性(Atomicity)解决“部分失败”问题
事务中的所有操作要么全部成功,要么全部不生效。它防止因程序崩溃、断电或异常导致只执行了部分语句,留下数据不一致的中间状态。
- 数据库通过 undo log(回滚日志)实现:执行过程中记录反向操作,一旦失败就按日志逆向恢复
- 例如:转账操作包含“扣减 A 账户”和“增加 B 账户”两个步骤;若第二步失败,原子性保证第一步也自动撤销,A 的钱不会凭空消失
一致性(Consistency)解决“业务规则被破坏”问题
事务必须使数据库从一个合法状态转变到另一个合法状态,始终满足预定义的约束(如主键唯一、外键引用、check 条件、触发器逻辑等)。
- 它不是数据库自动提供的独立机制,而是原子性、隔离性、持久性 + 应用层逻辑 + 数据库约束共同保障的结果
- 例如:账户余额不能为负数。即使事务具备原子性和隔离性,若应用没校验余额就扣款,一致性仍会被破坏;所以需配合 check 约束或事务内显式判断
隔离性(Isolation)解决“并发干扰”问题
多个事务同时执行时,彼此不应看到未提交的中间结果,也不能相互覆盖或读取到不一致的快照。它避免脏读、不可重复读、幻读等问题。
- 数据库通过锁(Locking)或 MVCC(多版本并发控制)实现不同隔离级别(如 Read Committed、Repeatable Read)
- 例如:事务 A 正在统计某商品库存,事务 B 同时修改该库存并提交;若隔离级别不足,A 可能两次查询得到不同结果(不可重复读),影响报表准确性
持久性(Durability)解决“系统崩溃后丢失”问题
一旦事务成功提交,其结果就必须永久保存,即使随后发生断电、进程崩溃或硬件故障,数据也不能丢失。
- 主要依赖 write-ahead logging(WAL):先将变更写入 redo log(重做日志),再异步刷盘到数据文件;崩溃恢复时用 redo log 重放已提交事务
- 注意:持久性不等于“实时落盘”,而是“保证最终落盘且可恢复”。同步刷盘策略(如 synchronous_commit = on)可增强可靠性,但影响性能










