ACIDmysql
ACID,是指在數據庫管理系統(DBMS)中,事務(transaction)所具備的四個特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、持久性(Durability)。sql
具體舉例:數據庫
設想網上購物的一次交易,其付款過程至少包括如下幾步數據庫操做:
併發
更新客戶所購商品的庫存信息ide
保存客戶付款信息--可能包括與銀行系統的交互spa
生成訂單而且保存到數據庫中 .net
更新用戶相關信息,例如購物數量等等 事務
正常的狀況下,這些操做將順利進行,最終交易成功,與交易相關的全部數據庫信息也成功地更新。可是,若是在這一系列過程當中任何一個環節出了差錯,例如在更新商品庫存信息時發生異常、該顧客銀行賬戶存款不足等,都將致使交易失敗。一旦交易失敗,數據庫中全部信息都必須保持交易前的狀態不變,好比最後一步更新用戶信息時失敗而致使交易失敗,那麼必須保證這筆失敗的交易不影響數據庫的狀態--庫存信息沒有被更新、用戶也沒有付款,訂單也沒有生成。不然,數據庫的信息將會一片混亂而不可預測。
數據庫事務正是用來保證這種狀況下交易的平穩性和可預測性的技術。 ci
而後咱們再回到實際應用中,看它是怎麼工做的get
在數據庫系統中,一個事務是指:由一系列數據庫操做組成的一個完整的邏輯過程。例如銀行轉賬,從原帳戶扣除金額,以及向目標帳戶添加金額,這兩個數據庫操做的總和,構成一個完整的邏輯過程,不可拆分。這個過程被稱爲一個事務,具備ACID特性。
原子性:一個事務(transaction)中的全部操做,要麼所有完成,要麼所有不完成,不會結束在中間某個環節。事務在執行過程當中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務歷來沒有執行過同樣。
!一致性:在事務開始以前和事務結束之後,數據庫的完整性限制沒有被破壞。
隔離性:當兩個或者多個事務併發訪問(此處訪問指查詢和修改的操做)數據庫的同一數據時所表現出的相互關係。事務隔離分爲不一樣級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和串行化(Serializable)。
持久性:在事務完成之後,該事務對數據庫所做的更改便持久地保存在數據庫之中,而且是徹底的。