事務的ACID 屬性

2021-07-07 09:17:50 字數 1658 閱讀 5597

事務的四大屬性acid即事務的原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability)

原子性(atomicity)

原子性是指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。

一致性(consistency)

事務必須使資料庫從乙個一致性狀態變換到另外乙個一致性狀態。

隔離性(isolation)

事務的隔離性是多個使用者併發訪問資料庫時,資料庫為每乙個使用者開啟的事務,不能被其他事務的運算元據所干擾,多個併發事務之間要相互隔離。

永續性(durability)

永續性是指乙個事務一旦被提交,它對資料庫中資料的改變就是永久性的,接下來即使資料庫發生故障也不應該對其有任何影響。

事務的隔離級別

l 多個執行緒開啟各自事務運算元據庫中資料時,資料庫系統要負責隔離操作,以保證各個執行緒在獲取資料時的準確性。

l 如果不考慮隔離性,可能會引發如下問題:

1、 髒讀:

• 指乙個事務讀取了另外乙個事務未提交的資料。

這是非常危險的,假設a向b轉帳100元,對應sql語句如下所示

1.updateaccount set money=money+100 while name=『b』;

2.updateaccount set money=money-100 while name=『a』;

當第1條sql執行完,第2條還沒執行(a未提交時),如果此時b查詢自己的帳戶,就會發現自己多了100元錢。如果a等b走後再回滾,b就會損失100元。

2、不可重複讀:

• 在乙個事務內讀取表中的某一行資料,多次讀取結果不同。

例如銀行想查詢a帳戶餘額,第一次查詢a帳戶為200元,此時a向帳戶存了100元並提交了,銀行接著又進行了一次查詢,此時a帳戶為300元了。銀行兩次查詢不一致,可能就會很困惑,不知道哪次查詢是準的。

• 和髒讀的區別是,髒讀是讀取前一事務未提交的髒資料,不可重複讀是重新讀取了前一事務已提交的資料。

• 很多人認為這種情況就對了,無須困惑,當然是後面的為準。我們可以考慮這樣一種情況,比如銀行程式需要將查詢結果分別輸出到電腦螢幕和寫到檔案中,結果在乙個事務中針對輸出的目的地,進行的兩次查詢不一致,導致檔案和螢幕中的結果不一致,銀行工作人員就不知道以哪個為準了。

3、虛讀(幻讀)

• 是指在乙個事務內讀取到了別的事務插入的資料,導致前後讀取不一致。

• 如丙存款100元未提交,這時銀行做報表統計account表中所有使用者的總額為500元,然後丙提交了,這時銀行再統計發現帳戶為600元了,造成虛讀同樣會使銀行不知所措,到底以哪個為準。

因此,在特定的情況下,為事務設定相應的隔離級別是十分必要的。

事務的隔離級別的設定方法如下:

serializable:可避免髒讀、不可重複讀、虛讀情況的發生。(序列化)(序列化)

• repeatable read:可避免髒讀、不可重複讀情況的發生。(可重複讀)

• read committed:可避免髒讀情況發生(讀已提交)。

• read uncommitted:最低級別,以上情況均無法保證。(讀未提交)

set transaction isolation level 設定事務隔離級別

select@@tx_isolation 查詢當前事務隔離級別

事務的ACID屬性

事務acid的屬性 1.原子性 原子性是指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。2.一致性 事務必須使資料庫從乙個一致性的狀態變換成另乙個一致性的狀態 3.隔離性 乙個事務的執行不能被其他的事務干擾,即乙個事務內部的操作及使用的資料對併發的其他事務是隔離的,併發執行的各...

事務的ACID屬性

1,原子性 atomicity 原子性是指事物是乙個不可分割的最小單位,事物中的操作要麼都發生,要麼都不發生。2,一致性 consistency 事物必須使資料庫從乙個一致狀態變換到另乙個致狀態。打個比喻 小明 有1000塊,小紅有1000塊,餘額之和2000是乙個一致狀態,小明轉給小紅500元,2...

事務的ACID 屬性

事務的四大屬性acid即事務的原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability.原子性 atomicity 原子性是指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。一致性 consistency 事務必須使資料...