事務的4大特性(ACID)

2021-08-31 03:35:46 字數 1480 閱讀 1086

如果乙個資料庫聲稱支援事務的操作,那麼該資料庫必須要具備以下四個特性:

原子性,一致性,隔離性,永續性

原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,所以事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能對資料庫有任何影響。為了實現原子性,需要通過日誌:將所有對資料的更新操作都寫入日誌,如果乙個事務中的一部分操作已經成功,但以後的操作,由於斷電/系統崩潰/其它的軟硬體錯誤而無法繼續,則通過回溯日誌,將已經執行成功的操作撤銷,從而達到「全部操作失敗」的目的。

一致性是指事務必須使資料庫從乙個一致性狀態變換到另乙個一致性狀態,也就是說乙個事務執行之前和執行之後都必須處於一致性狀態,不允許出現中間狀態。舉例:

拿轉賬來說,假設使用者a有1000塊錢,使用者b有2000塊錢,那麼不管a和b之間如何轉賬,轉幾次賬,事務結束後兩個使用者的錢相加起來應該還得是3000,這就是事務的一致性。事務不一致的情況:

(1)使用者a給使用者b轉500塊錢,此時使用者a賬戶減去500元,剩下500元,但是此時突然系統崩潰了,使用者b沒來得及加500,此時的資料庫就出現了不一致的狀態。

(2)事務1需要將100元轉入帳號a:先讀取帳號a的值,然後在這個值上加上500。但是,在這兩個操作之間,另乙個事務2修改了帳號a的值,為它增加了500元。那麼最後的結果應該是a增加了1000元。但事實上,事務1最終完成後,帳號a只增加了500元,因為事務2的修改結果被事務1覆蓋掉了。這使得三個賬戶轉賬後,資料的不一致。其實,原子性,隔離性,以及永續性都是為了保證資料庫資料的一致性。

隔離性是當多個使用者併發訪問資料庫時,比如操作同一張表時,資料庫為每乙個使用者開啟的事務,不能被其他事務的操作所干擾,多個併發事務之間要相互隔離。

即要達到這麼一種效果:對於任意兩個併發的事務t1和t2,在事務t1看來,t2要麼在t1開始之前就已經結束,要麼在t1結束之後才開始,這樣每個事務都感覺不到有其他事務在併發地執行。

永續性是指乙個事務一旦被提交了,那麼對資料庫中的資料的改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作。

例如我們在使用jdbc運算元據庫時,在提交事務方法後,提示使用者事務操作完成,當我們程式執行完成直到看到提示後,就可以認定事務以及正確提交,即使這時候資料庫出現了問題,也必須要將我們的事務完全執行完成,否則就會造成我們看到提示事務處理完畢,但是資料庫因為故障而沒有執行事務的重大錯誤。

未提交讀(read uncommitted):最低的隔離級別,什麼都不需要做,乙個事務可以讀到另乙個事務未提交的結果。所有的併發事務問題都會發生。

提交讀(read committed):只有在事務提交後,其更新結果才會被其他事務看見。解決髒讀問題。

可重複讀(repeated read):在乙個事務中,對於同乙份資料的讀取結果總是相同的,無論是否有其他事務對這份資料進行操作,以及這個事務是否提交。可以解決髒讀、不可重複讀。

序列讀(serialization):事務序列化執行,隔離級別最高,犧牲了系統的併發性。可以解決併發事務的所有問題。通常,在工程實踐中,為了效能的考慮會對隔離性進行折中。

事務的4個特性(ACID)

事務是為解決資料安全操作提出的,事務控制實際上就是控制資料的安全訪問。用乙個簡單例子說明 銀行轉帳業務,賬戶a要將自己賬戶上的1000元轉到b賬戶下面,a賬戶餘額首先要減去1000元,然後b賬戶要增加1000元。假如在中間網路出現了問題,a賬戶減去1000元已經結束,b因為網路中斷而操作失敗,那麼整...

事務四大特性(ACID)

1.原子性 atomicity 化學中的原子指不可再分的基本微粒,資料庫中原子性強調事務是乙個不可分割的整體,事務開始後所有操作要麼全部成功,要麼全部失敗,不可能停滯在中間某個環節。如果事務執行過程 錯就會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣不會對資料庫有任何影響。2.一致性 cons...

事務特性(ACID)

原子性 是指事務乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。不能夠單獨執行。把一組操作放入事務中 一致性 事務的執行的前後,資料的完整性要得到保證。隔離性 強調的是多個使用者併發訪問資料庫的時候,乙個使用者事務不能被其他使用者的事務所干擾到,多個併發事務之間的資料要相互隔離。解決多...