一、什么是事務(wù)
????????事務(wù)就是用戶定義的一系列操作,這些操作可以視為一個完成的邏輯處理工作單元,要么全部執(zhí)行,要么全部不執(zhí)行,是不可分割的工作單元。
典型場景:銀行轉(zhuǎn)賬
A 轉(zhuǎn)賬100元給B,A賬戶減少100元,B賬戶增加100元;
如果A轉(zhuǎn)出失敗或者B轉(zhuǎn)入失?。ㄈ我庖环绞。?,則A賬戶不會減少,B賬戶不會增加?
二、事務(wù)的特性(ACID)
- 原子性(Atomicity):一個事務(wù)中的所有操作,要么全部完成,要么全部不完成,不會結(jié)束在中間某個環(huán)節(jié)。事務(wù)在執(zhí)行過程中發(fā)生錯誤,會被回滾(Rollback)到事務(wù)開始前的狀態(tài),就像這個事務(wù)從來沒有執(zhí)行過一樣。
- 一致性(Consistency):在事務(wù)開始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫的完整性沒有被破壞。
- 事務(wù)隔離(Isolation):數(shù)據(jù)庫允許多個并發(fā)事務(wù)同時對其數(shù)據(jù)進(jìn)行讀寫和修改,隔離性可以防止多個事務(wù)并發(fā)執(zhí)行時由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致。
- 持久性(Durability):事務(wù)處理結(jié)束后,對數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會丟失。
三、事務(wù)的隔離級別
- 未提交讀(Read uncommitted),最低的隔離級別,允許“臟讀”(dirty reads),事務(wù)可以看到其他事務(wù)“尚未提交”的修改。如果另一個事務(wù)回滾,那么當(dāng)前事務(wù)讀到的數(shù)據(jù)就是臟數(shù)據(jù)。
- 提交讀(read committed),一個事務(wù)可能會遇到不可重復(fù)讀(Non Repeatable Read)的問題。不可重復(fù)讀是指,在一個事務(wù)內(nèi),多次讀同一數(shù)據(jù),在這個事務(wù)還沒有結(jié)束時,如果另一個事務(wù)恰好修改了這個數(shù)據(jù),那么,在第一個事務(wù)中,兩次讀取的數(shù)據(jù)就可能不一致。
- 可重復(fù)讀(repeatable read),一個事務(wù)可能會遇到幻讀(Phantom Read)的問題?;米x是指,在一個事務(wù)中,第一次查詢某條記錄,發(fā)現(xiàn)沒有,但是,當(dāng)試圖更新這條不存在的記錄時,竟然能成功,并且,再次讀取同一條記錄,它就神奇地出現(xiàn)了。
- 串行化(Serializable),最嚴(yán)格的隔離級別,所有事務(wù)按照次序依次執(zhí)行,因此,臟讀、不可重復(fù)讀、幻讀都不會出現(xiàn)。雖然 Serializable 隔離級別下的事務(wù)具有最高的安全性,但是,由于事務(wù)是串行執(zhí)行,所以效率會大大下降,應(yīng)用程序的性能會急劇降低。如果沒有特別重要的情景,一般都不會使用 Serializable 隔離級別。
臟讀是指一個事務(wù)讀取了未提交事務(wù)執(zhí)行過程中的數(shù)據(jù)。 當(dāng)一個事務(wù)的操作正在多次修改數(shù)據(jù),而在事務(wù)還未提交的時候,另外一個并發(fā)事務(wù)來讀取了數(shù)據(jù),就會導(dǎo)致讀取到的數(shù)據(jù)并非是最終持久化之后的數(shù)據(jù),這個數(shù)據(jù)就是臟讀的數(shù)據(jù)。
不可重復(fù)讀是指對于數(shù)據(jù)庫中的某個數(shù)據(jù),一個事務(wù)執(zhí)行過程中多次查詢返回不同查詢結(jié)果,這就是在事務(wù)執(zhí)行過程中,數(shù)據(jù)被其他事務(wù)提交修改了。 不可重復(fù)讀同臟讀的區(qū)別在于,臟讀是一個事務(wù)讀取了另一未完成的事務(wù)執(zhí)行過程中的數(shù)據(jù),而不可重復(fù)讀是一個事務(wù)執(zhí)行過程中,另一事務(wù)提交并修改了當(dāng)前事務(wù)正在讀取的數(shù)據(jù)。文章來源:http://www.zghlxwxcb.cn/news/detail-686037.html
幻讀是事務(wù)非獨立執(zhí)行時發(fā)生的一種現(xiàn)象,例如事務(wù)T1批量對一個表中某一列列值為1的數(shù)據(jù)修改為2的變更,但是在這時,事務(wù)T2對這張表插入了一條列值為1的數(shù)據(jù),并完成提交。此時,如果事務(wù)T1查看剛剛完成操作的數(shù)據(jù),發(fā)現(xiàn)還有一條列值為1的數(shù)據(jù)沒有進(jìn)行修改,而這條數(shù)據(jù)其實是T2剛剛提交插入的,這就是幻讀。 幻讀和不可重復(fù)讀都是讀取了另一條已經(jīng)提交的事務(wù)(這點同臟讀不同),所不同的是不可重復(fù)讀查詢的都是同一個數(shù)據(jù)項,而幻讀針對的是一批數(shù)據(jù)整體(比如數(shù)據(jù)的個數(shù))。文章來源地址http://www.zghlxwxcb.cn/news/detail-686037.html
到了這里,關(guān)于事務(wù)——什么是事務(wù),事務(wù)的特性,事務(wù)的隔離級別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!