資料庫事務ACID和四個隔離級別

2021-12-30 12:23:45 字數 1835 閱讀 3434

在實際的業務場景中,併發讀寫引出了和事務控制的需求。優秀的事務處理能力是關係型資料庫(特別是oracle等商用rdbms)相對於正當風口的nosql資料庫的一大亮點。但這也從另一方面說明了事務控制的複雜性——正因為過於複雜,大部分nosql都沒提供事務支援或只提供部分事務支援。

乙個資料庫事務是"乙個被視為單一的工作單元的操作序列"。乙個良好的事務處理系統,必須具備四個標準特性:

原子性(atomicity):乙個事務必須被視為乙個不可分割的最小工作單元,整個事務中的所有操作要麼全部提交成功,要麼全部失敗回滾,對於乙個事務來說,不可能只執行其中的一部分操作,這就是事務的原子性一致性(consistency):資料庫總是從乙個一致性的狀態轉換到另乙個一致性的狀態。(在前面的例子中,一致性確保了,即使在執行第

三、四條語句之間時系統崩潰,支票賬戶中也不會損失200美元,因為事務最終沒有提交,所以事務中所做的修改也不會儲存到資料庫中。)隔離性(isolation):通常來說,乙個事務所做的修改在最終提交以前,對其他事務是不可見的。永續性(durability):一旦事務提交,則其所做的修改不會永久儲存到資料庫。(此時即使系統崩潰,修改的資料也不會丟失。永續性是個有佔模糊的概念,因為實際上永續性也分很多不同的級別。有些永續性策略能夠提供非常強的安全保障,而有些則未必,而且不可能有能做到100%的永續性保證的策略。)

以上四個特性就是常說的acid。其中,隔離性的四個級別是面試常考點。

在read uncommitted級別,事務中的修改,即使沒有提交,對其他事務也都是可見的。事務可以讀取未提交的資料,這也被稱為髒讀(dirty read)。這個級別會導致很多問題,從效能上來說,read uncommitted不會比其他的級別好太多,但卻缺乏其他級別的很多好處,除非真的有非常必要的理由,在實際應用中一般很少使用。

大多數資料庫系統的預設隔離級別都是read commtted(但mysql不是)。read committed滿足前面提到的隔離性的簡單定義:乙個事務開始時,只能」看見」已經提交的事務所做的修改。換句話說,乙個事務從開始直到提交之前,所做的任何修改對其他事務都是不可見的。這個級別有時候叫做不可重複讀(nonrepeatble read),因為兩次執行同樣的查詢,可能會得到不一樣的結果。

repeatable read解決了髒讀的問題。該隔離級別保證了在同乙個事務中多次讀取同樣記錄結果是一致的。但是理論上,可重複讀隔離級別還是無法解決另外乙個幻讀(phantom read)的問題。所謂幻讀,指的是當某個事務在讀取某個範圍內的記錄時,另乙個事務又在該範圍內插入了新的記錄,當之前的事務再次讀取該範圍的記錄時,會產生幻行(phantom row)。innodb和xtradb儲存引擎通過多版本併發控制(mvcc,multiversion concurrency control)解決了幻讀的問題。

serializable是最高的隔離級別。它通過強制事務序列執行,避免了前面說的幻讀的問題。簡單來說,serializable會在讀取每一行資料都加鎖,所以可能導致大量的超時和鎖爭用問題。實際應用中也很少用到這個隔離級別,只有在非常需要確保資料的一致性而且可以接受沒有併發的情況下,才考慮採用該級別。

打鉤說明該隔離級別還存在這種情況,打x代表該隔離級別已經解決了這種情況:

隔離級別

髒讀不可重複讀

幻讀

讀未提交(read uncommitted)

y y y

讀已提交(read committed)

x y y

可重複讀(repeatable read)

x x y

可序列化(serializable)

x x x

資料庫事務的四個特性ACID

原子性指的指的就是這個操作,要麼全部成功,要麼全部失敗回滾。不存在其他的情況。一致性是指事務必須使資料庫從乙個一致性狀態變換到另乙個一致性狀態,也就是說乙個事務執行之前和執行之後都必須處於一致性狀態。舉個例子。就是a和b的錢是1000元,a給你100元,無論最後雙方轉了多少次,總的錢一定是1000元...

資料庫 事務的ACID和隔離級別

寫在前面 在計算機語言中,一般指訪問並更新資料庫中的乙個程式執行單元。事務具有的四個特點,稱為acid。在資料庫的併發訪問中,為了保證資料的讀取正確性,設定的事務的隔離級別。例如 abcde五個賬戶,每個賬戶有100元,共計500元,a給b轉賬10元,b給c轉賬5元,c給d轉賬5元,d給e轉賬10元...

事務的四個特性 ACID

事務是使用者定義的乙個資料庫操作的序列,這些操作要麼去做要麼全不做,是乙個不可分割的工作單位。事務具有四個特徵 原子性 atomicity 一致性 consistency 隔離性 isolation 和持續性 durability 簡稱為 acid 特性。原子性 atomicity 乙個事務是乙個不...