事務(wù)具有四個(gè)特征:
原子性( Atomicity )
一致性( Consistency )
隔離性( Isolation )
持續(xù)性( Durability )。
這四個(gè)特性簡稱為 ACID 特性。
原子性(獨(dú)立操作)
原子性任務(wù)是一個(gè)獨(dú)立的操作單元,是一種要么全部是,要么全部不是的原子單位性的操作。
一致性(只包含成功提交的結(jié)果)
一個(gè)事務(wù)可以封裝狀態(tài)改變(除非它是一個(gè)只讀的)。事務(wù)必須始終保持系統(tǒng)處于一致的狀態(tài),不管在任何給定的時(shí)間并發(fā)事務(wù)有多少。
一致性有下面特點(diǎn):
如果一個(gè)操作觸發(fā)輔助操作(級聯(lián),觸發(fā)器),這些也必須成功,否則交易失敗。
如果系統(tǒng)是由多個(gè)節(jié)點(diǎn)組成,一致性規(guī)定所有的變化必須傳播到所有節(jié)點(diǎn)(多主復(fù)制)。如果從站節(jié)點(diǎn)是異步更新,那么我們打破一致性規(guī)則,系統(tǒng)成為“最終一致性”。
一個(gè)事務(wù)是數(shù)據(jù)狀態(tài)的切換,因此,如果事務(wù)是并發(fā)多個(gè),系統(tǒng)也必須如同串行事務(wù)一樣操作。
在現(xiàn)實(shí)中,事務(wù)系統(tǒng)遭遇并發(fā)請求時(shí),這種串行化是有成本的, Amdahl法則描述如下:它是描述序列串行執(zhí)行和并發(fā)之間的關(guān)系。
“一個(gè)程序在并行計(jì)算情況下使用多個(gè)處理器所能提升的速度是由這個(gè)程序中串行執(zhí)行部分的時(shí)間決定的?!?/p>
大多數(shù)數(shù)據(jù)庫管理系統(tǒng)選擇(默認(rèn)情況下)是放寬一致性,以達(dá)到更好的并發(fā)性。
隔離性(讀已提交,讀未提交,不可重復(fù)讀,串行化)
事務(wù)是并發(fā)控制機(jī)制,他們交錯使用時(shí)也能提供一致性。隔離讓我們隱藏來自外部世界未提交的狀態(tài)變化,一個(gè)失敗的事務(wù)不應(yīng)該破壞系統(tǒng)的狀態(tài)。隔離是通過用悲觀或樂觀鎖機(jī)制實(shí)現(xiàn)的。
SQL標(biāo)準(zhǔn)規(guī)定了四個(gè)隔離水平:
READ_UNCOMMITTED
READ_COMMITTED
REPETABLE_READ
SERIALIZABLE

持久性(持久更新)
一個(gè)成功的事務(wù)將永久性地改變系統(tǒng)的狀態(tài),所以在它結(jié)束之前,所有導(dǎo)致狀態(tài)的變化都記錄在一個(gè)持久的事務(wù)日志中。如果我們的系統(tǒng)突然受到系統(tǒng)崩潰或斷電,那么所有未完成已提交的事務(wù)可能會重演。