一、事務的概念 事務就是一組獨立不可分割的工作單元,事務中的操作要麼全部執行,要麼都不執行。 二、事務的四大特性(ACID) 1、原子性(Automatic) 事務中的所有的操作要麼是全部成功要麼是全部失敗,不會存在事務中操作部分失敗,部分成功的情況。 2、一致性(Consistent) 執行事務前 ...
一、事務的概念
事務就是一組獨立不可分割的工作單元,事務中的操作要麼全部執行,要麼都不執行。
二、事務的四大特性(ACID)
1、原子性(Automatic)
事務中的所有的操作要麼是全部成功要麼是全部失敗,不會存在事務中操作部分失敗,部分成功的情況。
2、一致性(Consistent)
執行事務前操作的數據的狀態和執行事務後所操作數據的狀態是一致的,例如:我們操作資料庫以一個事務操作從A用戶的賬戶中轉賬200元到B用戶的賬戶中,操作前A賬戶有1000元,B賬戶有200元,其中涉及到兩個操作從A賬戶扣減200元,往B賬戶增加200元,在事務的操作成功提交後,A賬戶有800元,B賬戶有400元。事務操作前A、B賬戶的總額為1200元,事務操作後A、B賬戶的總額仍是1200元。A、B的總額在事務的操作前後都是一致的。如果在執行這個事務的操作的過程中出現錯誤,則事務不成功,整個事務操作都是失敗的,不存在部分成功部分失敗的情況,則在事務操作後的A、B賬戶的總額仍是1200元。
3、隔離性(Isolation)
通常來說事務的操作在最終提交前,對其他事務的來說都是不可見的。但是隔離性在不同的隔離級別下卻不一定總是滿足以上的描述。
4、持久性(Duration)
一個事務的操作在提交成功操作後,資料庫中所做的修改就是永久性的,即使是資料庫系統故障崩潰,事務的修改都不會丟失。
三、事務的隔離性和隔離級別
1、讀未提交(Automatic)
在一個事務操作的過程中對於一個數據做了修改還未提交的時候,其他的事務可以立即讀取到這個事務對於該數據的修改。在此種情況下會出現臟讀的現象,即因為在事務尚未提交的時候其他事務讀取到了該事務修改的數據,若該事務提交失敗出現回滾,則該數據修改並沒有生效,其他事務讀取到的是無效值。
2、讀已提交(Automatic)
一個事務操作過程中的修改必須等到事務的修改提交成功後,才可以被其他事務讀取到。在此種情況下能解決臟讀現象問題,因為事務在讀取到的數據都是其他事務已經操作提交成功的,不會出現讀取到提交失敗的臟數據。但是會出現不可重覆讀的問題,因為事務在操作的過程中,如果兩次讀取的另一個事務操作修改的數據,一次讀取是在事務提交前,另一次讀取是在事務提交後,就會出現在同一個事務中多次讀取到的數據的值是不一致的。當然,在讀未提交的隔離級別下,也會出現這個問題。
3、可重覆讀(Automatic)
一個事務在操作的過程中,讀取到的數據在整個事務的操作過程中是不會變的,即使是在這個事務的過程中,其他的事務對這個事務讀取的數據做了修改。這個隔離級別可以解決不可重讀的問題,但在這個事務隔離級別中會出現幻讀的現象,即在事務讀取某個範圍的數據記錄時,另一個事務在這個範圍內數據插入了一行新數據並提交成功,導致在這個插入操作前後,當前事務兩次查詢出來的記錄數是不一致的。此現象稱為幻讀,前兩個隔離級別也是存在這個問題的。
4、串列化(Automatic)
資料庫中對於同一條數據的事務操作都是串列進行的,對於同一條數據的操作不存在並行執行的情況。當然前面的說的臟讀,不可重覆讀,幻讀問題都是由於事務在操作同一條數據時需要並行執行才會出現的問題,在這個隔離級別下,由於對於同一條數據事務的操作都是串列化,便不存在上述提到的所有問題了。
雖然隨著隔離級別的提升,可以解決相對於上一個隔離級別中存在的問題,但是隨著隔離級別越高(即隔離得越嚴實),系統的效率就越低。