事務具有四個屬性,這些用於在事務之前和之後維護資料庫的一致性。
事務屬性
- 原子性(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的恢復子系統負責隔離性屬性。