原子性:整個事務中的所有操作,要么全部完成,要么全部不完成,不可能停滯在中間某個環(huán)節(jié)。事務在執(zhí)行過程中發(fā)生錯誤,會被回滾(Rollback)到事務開始前的狀態(tài),就像這個事務從來沒有執(zhí)行過一樣。
一致性:一個事務可以封裝狀態(tài)改變(除非它是一個只讀的)。事務必須始終保持系統(tǒng)處于一致的狀態(tài),不管在任何給定的時間并發(fā)事務有多少。也就是說:如果事務是并發(fā)多個,系統(tǒng)也必須如同串行事務一樣操作。其主要特征是保護性和不變性(Preserving an Invariant),以轉(zhuǎn)賬案例為例,假設有五個賬戶,每個賬戶余額是100元,那么五個賬戶總額是500元,如果在這個5個賬戶之間同時發(fā)生多個轉(zhuǎn)賬,無論并發(fā)多少個,比如在A與B賬戶之間轉(zhuǎn)賬5元,在C與D賬戶之間轉(zhuǎn)賬10元,在B與E之間轉(zhuǎn)賬15元,五個賬戶總額也應該還是500元,這就是保護性和不變性。
隔離性:隔離狀態(tài)執(zhí)行事務,使它們好像是系統(tǒng)在給定時間內(nèi)執(zhí)行的唯一操作。如果有兩個事務,運行在相同的時間內(nèi),執(zhí)行相同的功能,事務的隔離性將確保每一事務在系統(tǒng)中認為只有該事務在使用系統(tǒng)。這種屬性有時稱為串行化,為了防止事務操作間的混淆,必須串行化或序列化請求,使得在同一時間僅有一個請求用于同一數(shù)據(jù)。
持久性:在事務完成以后,該事務對數(shù)據(jù)庫所作的更改便持久的保存在數(shù)據(jù)庫之中,并不會被回滾。由于一項操作通常會包含許多子操作,而這些子操作可能會因為硬件的損壞或其他因素產(chǎn)生問題。