原子性(Atomicity)
- 定义:原子性保证一个事务中的所有操作要么全部成功,要么全部失败。如果事务中的任何一个操作失败,整个事务都会被回滚,恢复到事务开始之前的状态。
- 示例:假设在一个银行转账操作中,涉及从账户 A 中扣款和向账户 B 中存款两个操作。如果其中一个操作失败(例如,扣款成功但存款失败),则整个转账操作都应被取消。
一致性(Consistency)
- 定义:一致性确保一个事务在开始和结束时,数据库的状态是有效的。事务的执行不能违反数据库的完整性约束。事务完成后,数据库必须从一个一致的状态转换到另一个一致的状态。
- 示例:在转账操作中,账户 A 和账户 B 的总金额在转账前后应保持不变。如果转账过程导致总金额不一致,则说明违反了一致性。
隔离性(Isolation)
- 定义:隔离性确保多个事务并发执行时,彼此之间不会互相干扰。每个事务都应该被视为独立的,系统应提供一种机制来隔离事务的执行结果,确保一个事务的执行不受其他事务的影响。
- 示例:如果两个用户同时尝试转账到同一个账户,隔离性确保每个转账操作的结果是独立的,避免出现数据混乱的情况。
持久性(Durability)
- 定义:持久性确保一旦事务被提交,其修改的结果将永久保存在数据库中,即使系统发生崩溃或故障。事务的结果不会丢失。
- 示例:在转账操作成功提交后,即使数据库服务器崩溃,转账的结果(如账户余额的变化)仍然会被保留。
主要区别
特性 | 定义 | 关注点 | 示例 |
---|---|---|---|
原子性 | 事务中的所有操作要么全部成功,要么全部失败。 | 事务的完整性 | 银行转账操作中的扣款和存款要么都成功,要么都失败。 |
一致性 | 事务执行前后,数据库必须保持一致的状态。 | 数据库的完整性约束 | 账户的总金额在转账前后必须相等。 |
隔离性 | 事务之间应相互独立,避免干扰。 | 并发事务的独立性 | 多个用户同时转账,结果不会相互影响。 |
持久性 | 一旦事务提交,结果将永久保存。 | 数据的可靠性 | 转账成功后,账户余额的改变不会因系统崩溃而丢失。 |