天天看點

資料庫 事務的特性ACID

事務(Transaction)是并發控制的基本機關。

    所謂事務,它是一個操作序列,這些操作要麼都執行,要麼都不執行,它是一個不可分割的工作機關。例如,銀行轉帳工作:從一個帳号扣款并使另一個帳号增款,這兩個操作要麼都執行,要麼都不執行。

  資料庫事務必須具備ACID特性,ACID是Atomic(原子性)、Consistency(一緻性)、Isolation(隔離性)和Durability(持久性)的英文縮寫。

  原子性:指整個資料庫事務是不可分割的工作機關。隻有使據庫中所有的操作執行成功,才算整個事務成功;事務中任何一個SQL語句執行失敗,那麼已經執行成功的SQL語句也必須撤銷,資料庫狀态應該退回到執行事務前的狀态。

  一緻性:指資料庫事務不能破壞關系資料的完整性以及業務邏輯上的一緻性。例如對銀行轉帳事務,不管事務成功還是失敗,應該保證事務結束後ACCOUNTS表中Tom和Jack的存款總額為2000元。

  隔離性:指的是在并發環境中,當不同的事務同時操縱相同的資料時,每個事務都有各自的完整資料空間。由并發事務所做的修改必須與任何其他并發事務所做的修改隔離。事務檢視資料更新時,資料所處的狀态要麼是另一事務修改它之前的狀态,要麼是另一事務修改它之後的狀态,事務不會檢視到中間狀态的資料。

  持久性:指的是隻要事務成功結束,它對資料庫所做的更新就必須永久儲存下來。即使發生系統崩潰,重新啟動資料庫系統後,資料庫還能恢複到事務成功結束時的狀态。

  事務的(ACID)特性是由關系資料庫管理系統(RDBMS,資料庫系統)來實作的。資料庫管理系統采用日志來保證事務的原子性、一緻性和持久性。日志記錄了事務對資料庫所做的更新,如果某個事務在執行過程中發生錯誤,就可以根據日志,撤銷事務對資料庫已做的更新,使資料庫退回到執行事務前的初始狀态。

  資料庫管理系統采用鎖機制來實作事務的隔離性。當多個事務同時更新資料庫中相同的資料時,隻允許持有鎖的事務能更新該資料,其他事務必須等待,直到前一個事務釋放了鎖,其他事務才有機會更新該資料。