資料庫事務ACID特性及隔離級別

2022-07-09 01:24:10 字數 1978 閱讀 8637

資料庫acid特性介紹

1、原子性(atomic)

乙個事務被視為乙個不可分割的最小工作單元,這個事務裡的所有操作要麼全部成功執行,要麼全都不執行,不能只執行其中的一部分操作。實現事務的原子性,要支援回滾操作,在某個操作失敗後,回滾到事務執行之前的狀態。    

回滾是乙個抽象概念,大多數資料庫在實現事務時是在事務操作的資料快照上進行,並不修改實際的資料,發生錯誤時並不提交。

2、 一致性(consistency)

一致性是指事務使得系統從乙個一致性的狀態轉換到另乙個一致性的狀態。在實際的工程專案中事務可以有不同程度的一致性:

強一致性:讀操作可以立即讀到提交的更新資料。

弱一致性:提交的更新操作,不一定立即會被讀操作讀到,這種情況存在不一致視窗,指的是讀操作要延遲一定時間才能讀到最新值。

最終一致性:弱一致性的特例。事務更新乙份資料,最終一致性保證在沒有其他事務更新同樣的值的話,最終所有的事務都會讀到之前事務更新的最新值。如果沒有錯誤發生,不一致視窗的大小依賴於通訊延遲、系統負載等。

其他一致性變體還有:

單調一致性:如果乙個程序已經讀到乙個值,那麼後續不會讀到更早的值。

會話一致性:保證客戶端和伺服器互動的會話過程中,讀操作可以讀到更新操作後的最新值。

3、隔離性(isolation)

乙個事務所做的修改在最終提交以前對其他事務是不可見的。

4、永續性(durability)

一旦事務提交,則所做的修改會永久儲存在資料庫中。

四種事務隔離級別

1、read uncommitted(未提交讀)

最低隔離級別。事務可以讀取到未提交的資料,也即髒讀(dirty read)。存在髒讀、不可重複讀、幻讀的問題。實際應用中一般很少使用這個隔離級別。

2、read committed(提交讀)

大多數資料庫系統預設的隔離級別(mysql不是)。只有在事務提交後,其更新結果才會被其他事務看見。該級別也叫 不可重複讀(nonrepeatable read),兩次執行同樣的查詢語句可能得到不同的結果。可以解決髒讀問題,存在不可重複讀、幻讀的問題。

不可重複讀發生的乙個場景:事務a需要多次讀取同乙個資料,當再次讀取該資料的時候 另乙個事務b修改了該資料,導致事務a讀到的該資料 與 上一次讀到的資料不一致。(側重在資料被修改了update)

3、repeated read(可重複讀)

mysql預設的事務隔離級別。在同乙個事務中多次讀取同樣記錄的結果總是一致的。可以解決髒讀、不可重複讀,存在幻讀(phantom read)問題。幻讀指的是當某個事務在讀取某個範圍內的記錄時,會產生幻行(phantom rows)。

幻讀發生的乙個場景:select檢測某資料是否存在,當不存在時插入資料,但在執行insert 語句插入資料時發現此記錄已經存在了,不能再插入,此時即發生了幻讀。

另乙個場景:事務a執行 select語句1 返回 5條記錄,再次執行 select語句1 時返回了 6條 記錄,也即與上次返回的結果集不一致。(側重在插入了新資料insert)

innodb引擎通過使用 nk鎖(next-key locks)解決幻讀問題。

4、serialization(可序列化)

事務序列化執行,隔離級別最高,犧牲了系統的併發性。解決髒讀、不可重複讀、幻讀,可保證事務安全。通過強制事務序列執行避免了幻讀問題,它在讀取的每一行資料上都加鎖,會導致大量的超時和鎖爭用問題。實際應用中很少使用這個隔離級別。

備註

不可重複讀的重點於在修改:

同樣的檢索條件讀取資料,   再次讀取出來時發現值不一致。

幻讀的重點在於新增或者刪除

同樣的條件,   第 1 次和第 2 次讀出來的記錄數不一樣。

資料庫 ACID及事務隔離級別

事務 併發控制和恢復的基本單位。atomicity原子性 事務是資料庫的邏輯工作單位,事務中包括的所有操作要麼都做,要麼什麼都不做。consistency一致性 事務執行的結果必須是使資料庫從乙個一致性狀態變到另乙個一致性狀態。例如對銀行轉帳事務,不管事務成功還是失敗,應該保證事務結束後accoun...

資料庫事務ACID特性

資料庫管理系統中事務 transaction 的四個特性 分析時根據首字母縮寫依次解釋 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 所謂事務,它是乙個操作序列,這些操作要麼都執行,要麼都不執行,它是乙個不可分割的工作單位。執行...

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

資料庫事務 transaction 是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。一方面,當多個應用程式併發訪問資料庫時,事務可以在應用程式間提供乙個隔離方法,防止互相干擾。另一方面,事務為資料庫操作序列提供了乙個從失敗恢復正常的方法。事務具有四個特性 原子性 atom...