事務的四大屬性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即事務的原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 原子性 atomicity 原子性是指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。一致性 consistency 事務必須使資料...
事務的ACID屬性
事務acid的屬性 1.原子性 原子性是指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。2.一致性 事務必須使資料庫從乙個一致性的狀態變換成另乙個一致性的狀態 3.隔離性 乙個事務的執行不能被其他的事務干擾,即乙個事務內部的操作及使用的資料對併發的其他事務是隔離的,併發執行的各...
事務的ACID屬性
1,原子性 atomicity 原子性是指事物是乙個不可分割的最小單位,事物中的操作要麼都發生,要麼都不發生。2,一致性 consistency 事物必須使資料庫從乙個一致狀態變換到另乙個致狀態。打個比喻 小明 有1000塊,小紅有1000塊,餘額之和2000是乙個一致狀態,小明轉給小紅500元,2...