事務的ACID屬性&&五種狀態


事務:指作為單個邏輯工作單元執行的一系列操作,要么完全地執行,要么完全地不執行。 事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向數據的資源。通過將一組相關操作組合為一個要么全部成功要么全部失敗的單元,可以簡化錯誤恢復並使應用程序更加可靠。一個邏輯工作單元要成為事務,必須滿足所謂的ACID(原子性、一致性、隔離性和持久性)屬性。事務是數據庫運行中的邏輯工作單位,由DBMS中的事務管理子系統負責事務的處理。(百度百科)

事務的四大屬性:

1.原子性

(Atomic)(Atomicity)
事務必須是原子工作單元;對於其 數據修改,要么全都執行,要么全都不執行。通常,與某個事務關聯的操作具有共同的目標,並且是相互依賴的。如果系統只執行這些操作的一個子集,則可能會破壞事務的總體目標。原子性消除了系統處理操作子集的可能性。

一致性

(Consistent)(Consistency)
事務在完成時,必須使所有的數據都保持一致狀態。在相關數據庫中,所有規則都必須應用於事務的修改,以保持所有數據的完整性。事務結束時,所有的內部數據結構(如 B 樹索引或雙向鏈表)都必須是正確的。某些維護一致性的責任由應用程序開發人員承擔,他們必須確保應用程序已強制所有已知的完整性約束。例如,當開發用於轉帳的應用程序時,應避免在轉帳過程中任意移動小數點。

隔離性

(Insulation)(Isolation)
由並發事務所作的修改必須與任何其它並發事務所作的修改隔離。事務查看數據時數據所處的狀態,要么是另一並發事務修改它之前的狀態,要么是另一事務修改它之后的狀態,事務不會查看中間狀態的數據。這稱為隔離性,因為它能夠重新裝載起始數據,並且重播一系列事務,以使數據結束時的狀態與原始事務執行的狀態相同。當事務可序列化時將獲得最高的 隔離級別。在此級別上,從一組可並行執行的事務獲得的結果與通過連續運行每個事務所獲得的結果相同。由於高度隔離會限制可並行執行的事務數,所以一些應用程序降低隔離級別以換取更大的吞吐量。

持久性

(Duration)(Durability)
事務完成之后,它對於系統的影響是永久性的。該修改即使出現致命的系統故障也將一直保持。
知識來源:
百度百科 :事務

處理模型

事務有三種模型:
1.隱式事務是指每一條數據操作語句都自動地成為一個事務,事務的開始是隱式的,事務的結束有明確的
標記。
2.顯式事務是指有顯式的開始和結束標記的事務,每個事務都有顯式的開始和結束標記。
3.自動事務是系統自動默認的,開始和結束不用標記。
並發控制
1. 數據庫系統一個明顯的特點是多個用戶共享數據庫資源,尤其是多個用戶可以同時存取相同數據。
串行控制:如果事務是順序執行的,即一個事務完成之后,再開始另一個事務
並行控制:如果DBMS可以同時接受多個事務,並且這些事務在時間上可以重疊執行。
2.並發控制概述
事務是並發控制的基本單位,保證事務ACID的特性是事務處理的重要任務,而並發操作有可能會破壞其ACID特性。
DBMS並發控制機制的責任:
對並發操作進行正確調度,保證事務的隔離性更一般,確保數據庫的一致性。
如果沒有鎖定且多個用戶同時訪問一個數據庫,則當他們的事務同時使用相同的數據時可能會發生問題。由於並發操作帶來的數據不一致性包括:丟失數據修改、讀”臟”數據(臟讀)、不可重復讀、產生幽靈數據。
(1)丟失數據修改
當兩個或多個事務選擇同一行,然后基於最初選定的值更新該行時,會發生丟失更新問題。每個事務都不知道其它事務的存在。最后的更新將重寫由其它事務所做的更新,這將導致數據丟失。如上例。
再例如,兩個編輯人員制作了同一文檔的電子復本。每個編輯人員獨立地更改其復本,然后保存更改后的復本,這樣就覆蓋了原始文檔。最后保存其更改復本的編輯人員覆蓋了第一個編輯人員所做的更改。如果在第一個編輯人員完成之后第二個編輯人員才能進行更改,則可以避免該問題。
(2)讀“臟”數據(臟讀)
讀“臟”數據是指事務T1修改某一數據,並將其寫回磁盤,事務T2讀取同一數據后,T1由於某種原因被除撤消,而此時T1把已修改過的數據又恢復原值,T2讀到的數據與數據庫的數據不一致,則T2讀到的數據就為“臟”數據,即不正確的數據。
例如:一個編輯人員正在更改電子文檔。在更改過程中,另一個編輯人員復制了該文檔(該復本包含到目前為止所做的全部更改)並將其分發給預期的用戶。此后,第一個編輯人員認為所做的更改是錯誤的,於是刪除了所做的編輯並保存了文檔。分發給用戶的文檔包含不再存在的編輯內容,並且這些編輯內容應認為從未存在過。如果在第一個編輯人員確定最終更改前任何人都不能讀取更改的文檔,則可以避免該問題。
( 3)不可重復讀
指事務T1讀取數據后,事務T2執行更新操作,使T1無法讀取前一次結果。不可重復讀包括三種情況:
事務T1讀取某一數據后,T2對其做了修改,當T1再次讀該數據后,得到與前一不同的值。
(4)產生幽靈數據
按一定條件從數據庫中讀取了某些記錄后,T2刪除了其中部分記錄,當T1再次按相同條件讀取數據時,發現某些記錄消失
T1按一定條件從數據庫中讀取某些數據記錄后,T2插入了一些記錄,當T1再次按相同條件讀取數據時,發現多了一些記錄。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM