ACID,指數據庫事務正確執行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。一個支持事務(Transaction)的數據庫,必須要具備這四種特性,不然在事務過程(Transaction processing)當中沒法保證數據的正確性,交易過程很可能達不到交易方的要求。web
中文名數據庫
acid併發
原子性url
整個事務中的全部操做spa
一致性日誌
在事務開始以前和事務結束之後htm
隔離性事務
隔離狀態執行事務ci
整個事務中的全部操做,要麼所有完成,要麼所有不完成,不可能停滯在中間某個環節。事務在執行過程當中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務歷來沒有執行過同樣。
一個事務能夠封裝狀態改變(除非它是一個只讀的)。事務必須始終保持系統處於一致的狀態,無論在任何給定的時間併發事務有多少。
也就是說:若是事務是併發多個,系統也必須如同串行事務同樣操做。其主要特徵是保護性和不變性(Preserving an Invariant),以轉帳案例爲例,假設有五個帳戶,每一個帳戶餘額是100元,那麼五個帳戶總額是500元,若是在這個5個帳戶之間同時發生多個轉帳,不管併發多少個,好比在A與B帳戶之間轉帳5元,在C與D帳戶之間轉帳10元,在B與E之間轉帳15元,五個帳戶總額也應該仍是500元,這就是保護性和不變性
隔離狀態執行事務,使它們好像是系統在給定時間內執行的惟一操做。若是有兩個事務,運行在相同的時間內,執行相同的功能,事務的隔離性將確保每一事務在系統中認爲只有該事務在使用系統。這種屬性有時稱爲串行化,爲了防止事務操做間的混淆,必須串行化或序列化請求,使得在同一時間僅有一個請求用於同一數據。
在事務完成之後,該事務所對數據庫所做的更改便持久的保存在數據庫之中,並不會被回滾。
因爲一項操做一般會包含許多子操做,而這些子操做可能會由於硬件的損壞或其餘因素產生問題,要正確實現ACID並不容易。ACID建議數據庫將全部須要更新以及修改的資料一次操做完畢,但實際上並不可行。
目前主要有兩種方式實現ACID:第一種是Write ahead logging,也就是日誌式的方式(現代數據庫均基於這種方式)。第二種是Shadow paging。