事务具有四个属性,这些用于在事务之前和之后维护数据库的一致性。
事务属性
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
1. 原子性
- 它声明事务的所有操作如有一个发生失败,则事务中止。
- 事务没有中途,即事务不能部分发生。 每个事务都被视为一个单元,并且运行完成或根本不执行。
原子性涉及以下两个操作:
中止: 如果事务中止,则所有更改都不可见。
提交: 如果事务提交,则所有更改都是可见的。
示例: 假设事务T跟随T1和T2。假设A账户有600元,B由账户有300元。将账户A 的100转账到账户B。
| T1 | T2 | 
|---|---|
| Read(A),A:= A-100,Write(A) | Read(B),Y:= Y+100,Write(B) | 
正常情况下事务完成后,账户A有500元,账户B有400元。
如果事务T在事务T1完成之后但在事务T2完成之前失败,则金额将从账户A中扣除但不会添加到账户B。这表示数据库状态不一致。为了确保数据库状态的正确性,必须完整地执行事务。
2. 一致性
- 保持完整性约束,以便数据库在事务之前和之后保持一致。
- 事务的执行将使数据库处于其先前稳定状态或新稳定状态。
- 数据库的一致属性声明每个事务都看到一致的数据库实例。
- 事务用于将数据库从一个一致状态转换为另一个一致状态。
例如: 必须在交易之前或之后维持总金额。
T发生之前的总计 = 600+300=900  
T发生之后的总计 = 500+400=900
因此,数据库是一致的。 在T1完成但T2失败的情况下,将发生不一致。
3. 隔离性
- 它表示,在第一个事务完成之前,第二个事务不能使用在执行事务时使用的数据。
- 在隔离中,如果正在执行事务T1并使用数据项X,则在事务T1结束之前,任何其他事务T2都不能访问该数据项。
- DBMS的并发控制子系统强制执行隔离属性。
4. 持久性
- 持久性属性用于指示数据库的状态一致的情况,它声明事务发生了永久性变化。
- 它们不会因错误的事务错误操作或系统故障而丢失。 当事务完成时,数据库将达到称为一致状态的状态。 即使在系统出现故障的情况下,也不会丢失其一致状态。
- DBMS的恢复子系统负责隔离性属性。
