1. 程式人生 > >數據庫事務中的四大特性ACID

數據庫事務中的四大特性ACID

enc 系統 不出 需要 整數 數據 情況下 iso 應該

一、概念

  數據庫事務中的四大特性(ACID):

  A:原子性(Atomicity),一個事務(transaction)中的所有操作,要麽全部完成,要麽全部不完成,不會結束在中間某個環節。

    事務在執行過程中發生錯誤,會被回滾(rollback)到事務開始前的狀態,就像這個事務從未執行過一樣。

    就像你買東西要麽交錢收貨一起都執行,要麽發不出貨,就退錢。

  C:一致性(Consistency),一致性是指事務使得系統從一個一致的狀態轉換到另一個一致狀態。

    比如數據庫崩潰後重啟,此時數據庫處於不一致的狀態,此時數據庫必須做crash recovery操作,大致步驟如下:

      a、通過日誌REDO(重演所有執行成功但是未寫入到磁盤的操作)

      b、再對到數據庫崩潰前沒有執行完成的事務進行UNDO(撤銷所有執行了一部分,但是有一部份還沒有執行完成,且尚未提交的操作,保證事務的原子性)

      c、crash recovery結束後,數據庫恢復了一致性,可以繼續工作

  I:隔離性(Isolation),指的是在並發環境中,當不同的事務同時操縱相同的數據時,每個事務都有各自的完整數據空間。

    由並發事務所做的修改必須與任何其他並發事務所做的修改隔離。事務查看數據更新時,數據所處的狀態要麽是另一事務修改它之前的狀態,要麽是另一事務修改它之後的狀態,事務不會查看到中間狀態的數據。

    打個比方,你買東西這個事情,是不影響其他人的。

  D:持久性(Durability),指的是只要事務成功結束,它對數據庫所做的更新就必須永久保存下來。

    即使發生系統崩潰,重新啟動數據庫系統後,數據庫還能恢復到事務成功結束時的狀態。

    打個比方,你買東西的時候需要記錄在賬本上,即使老板忘記了那也有據可查。

二、理解

  1、原子性並不能完全保證一致性。在多個事務並行進行的情況下,即使保證了每一個事務的原子性,仍然可能導致數據不一致的結果。

    例如,事務1需要將100元轉入帳號A:先讀取帳號A的值,然後在這個值上加上100。但是,在這兩個操作之間,另一個事務2修改了帳號A的值,為它增加了100元。那麽最後的結果應該是A增加了200元。但事實上,%20事務1最終完成後,帳號A只增加了100元,因為事務2的修改結果被事務1覆蓋掉了。

數據庫事務中的四大特性ACID