一、事務的概念
事務就是一組獨立不可分割的作業單元,事務中的操作要么全部執行,要么都不執行,
二、事務的四大特性(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)
資料庫中對于同一條資料的事務操作都是串行進行的,對于同一條資料的操作不存在并行執行的情況,當然前面的說的臟讀,不可重復讀,幻讀問題都是由于事務在操作同一條資料時需要并行執行才會出現的問題,在這個隔離級別下,由于對于同一條資料事務的操作都是串行化,便不存在上述提到的所有問題了,
雖然隨著隔離級別的提升,可以解決相對于上一個隔離級別中存在的問題,但是隨著隔離級別越高(即隔離得越嚴實),系統的效率就越低,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/114650.html
標籤:MySQL
上一篇:單表查詢
下一篇:day 35
