数据库的ACID是通过什么保证的

27 阅读2分钟

1、原子性(Atomicity)

通过日志(Logging)来记录所有对数据库的修改。如果事务中的某个操作失败,系统可以回滚(Rollback)到事务开始前的状态,撤销所有已执行的修改。

使用写前日志(Write-Ahead Logging, WAL)技术,确保在数据实际修改之前,相关的日志记录已经被写入到稳定的存储中。

使用保存点(Savepoints)和回滚段(Rollback Segments)来支持事务的部分回滚。

2、一致性(Consistency)

通过事务的ACID属性,特别是原子性和隔离性,来维护数据库的一致性。

触发器(Triggers)和约束(Constraints,如主键、外键、唯一性约束等)用于在数据修改时自动检查和维护数据的完整性。

数据库完整性规则,包括业务规则和数据完整性规则,被DBMS强制执行。

3、隔离性(Isolation)

使用锁(Locks)来防止多个事务同时修改同一数据项。锁可以是行级锁、页级锁或表级锁,具体取决于DBMS和事务的隔离级别。

隔离级别(Isolation Levels)定义了事务如何与其他事务隔离。常见的隔离级别包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。

多版本并发控制(Multi-Version Concurrency Control, MVCC)是另一种实现隔离性的技术,它允许每个事务看到数据的一个“快照”,从而 避免了直接的数据冲突。

4、持久性(Durability)

一旦事务被提交,DBMS确保所做的修改是持久的,即使在系统崩溃或重启之后。

通过日志记录和检查点(Checkpoints)技术,DBMS可以在系统恢复后重新应用未完成的日志记录,将数据恢复到一致的状态。

磁盘上的数据和日志通常会被定期地刷新和备份,以防止数据丢失。