持久性(Durability)是数据库事务ACID四大特性之一
持久性(Durability)是数据库事务ACID四大特性之一,指一旦事务成功提交(commit),其对数据库所做的修改将永久保存,即使系统发生故障(如断电、崩溃、硬件损坏等),这些更改也不会丢失。为实现持久性,数据库系统通常采用写前日志(Write-Ahead Logging, WAL)、事务日志持久化到磁盘、以及在提交时确保日志已刷写(fsync)等机制。例如,在PostgreSQL中,事务提交前必须将对应WAL记录写入并同步到磁盘;在MySQL InnoDB中,通过innodb_flush_log_at_trx_commit参数控制日志刷盘策略(值为1时严格保证持久性)。
-- 示例:开启事务、修改数据、提交(此时变更应持久化)BEGIN;UPDATEaccountsSETbalance=balance-100WHEREid=1;UPDATEaccountsSETbalance=balance+100WHEREid=2;COMMIT;-- 此刻,即使立即断电,恢复后数据仍保持一致持久性(Durability)与原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)共同构成ACID四大特性,它们并非孤立存在,而是通过分层协作、相互支撑来保障事务的端到端可靠性:
- 原子性确保事务“全做或全不做”,为持久性提供前提:只有成功提交(即原子性完成)的事务,其结果才需被持久化;若事务因错误回滚,则无需持久化任何中间状态。
- 一致性定义事务执行前后数据库必须满足的业务规则(如约束、触发器、外键等),持久性则保证这些一致状态不会因故障而丢失——即“正确的结果一旦落地,就永远正确”。
- 隔离性防止并发事务互相干扰,确保每个事务如同串行执行;这使单个事务的原子+一致行为可被独立判断,从而让持久性只需关注该事务最终提交态的可靠保存,而不必处理脏写或部分可见修改的持久化问题。
- 持久性是ACID的“终点保障”:它将前三个特性的逻辑成果(已原子提交、满足一致性、在隔离环境下达成的状态)固化到稳定存储中,使系统从“内存中正确”升级为“断电后仍正确”。
简言之:
🔹 原子性划定“什么该持久化”(仅COMMIT后的完整变更);
🔹 隔离性确保“持久化的状态是干净、无干扰的”;
🔹 一致性定义“持久化的内容必须合法”;
🔹 持久性则兑现承诺:“这个合法、干净、完整的状态,永不消失”。
四者形成闭环:没有原子性和隔离性,一致性无法可靠达成;没有持久性,前三个特性的成果将随故障归零——可靠性即不复存在。
