事務具有四個屬性,這些用於在事務之前和之後維護資料庫的一致性。
事務屬性
原子性涉及以下兩個操作:
中止: 如果事務中止,則所有更改都不可見。
提交: 如果事務提交,則所有更改都是可見的。
範例: 假設事務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。這表示資料庫狀態不一致。為了確保資料庫狀態的正確性,必須完整地執行事務。
例如: 必須在交易之前或之後維持總金額。
T發生之前的總計 = 600+300=900
T發生之後的總計 = 500+400=900
因此,資料庫是一致的。 在T1
完成但T2
失敗的情況下,將發生不一致。
T1
並使用資料項X
,則在事務T1
結束之前,任何其他事務T2
都不能存取該資料項。