溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

數(shù)據(jù)庫事務(wù)的概念和四大特性以及隔離級別

發(fā)布時間:2021-09-10 16:31:39 來源:億速云 閱讀:166 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要介紹“數(shù)據(jù)庫事務(wù)的概念和四大特性以及隔離級別”,在日常操作中,相信很多人在數(shù)據(jù)庫事務(wù)的概念和四大特性以及隔離級別問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”數(shù)據(jù)庫事務(wù)的概念和四大特性以及隔離級別”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

概念

事務(wù)指的是滿足 ACID 特性的一系列操作。在數(shù)據(jù)庫中,可以通過 Commit提交一個事務(wù),也可以使用 Rollback 進行回滾。

四大特性

1.原子性(Atomicity):事務(wù)被視為不可分割的最小單元,要么全部提交成功,要么全部失敗回滾。2.一致性(Consistency):事務(wù)執(zhí)行前后都保持一致性狀態(tài)。在一致性狀態(tài)下,所有事務(wù)對一個數(shù)據(jù)的讀取結(jié)果都是相同的。3.隔離性(Isolation):一個事務(wù)所做的修改在最終提交以前,對其它事務(wù)是不可見的。4.持久性(Durability):一旦事務(wù)提交,則其所做的修改將會永遠(yuǎn)保存到數(shù)據(jù)庫中。即使系統(tǒng)發(fā)生崩潰,事務(wù)執(zhí)行的結(jié)果也不能丟失??梢酝ㄟ^數(shù)據(jù)庫備份和恢復(fù)來保證持久性。

在了解完數(shù)據(jù)庫的四大特性之后,我們來討論一下數(shù)據(jù)庫的隔離級別的問題。在此之前,我們考慮在沒有數(shù)據(jù)庫隔離性的情況下,多用戶并發(fā)操作可能會發(fā)生的問題。

并發(fā)一致性問題

在并發(fā)環(huán)境下,一個事務(wù)如果受到另一個事務(wù)的影響,那么事務(wù)操作就無法滿足一致性條件。

1.丟失修改:多個事務(wù)同時讀取某一數(shù)據(jù),一個事務(wù)成功處理好了數(shù)據(jù),被另一個事務(wù)寫回原值,造成第一個事務(wù)更新丟失。例如,T1 和 T2 兩個事務(wù)都對一個數(shù)據(jù)進行修改,T1 先修改,T2 隨后修改,T2 的修改覆蓋了 T1 的修改。2.臟讀:臟讀是指在一個事務(wù)處理過程里讀取了另一個未提交的事務(wù)中的數(shù)據(jù)。例如,T1 修改一個數(shù)據(jù),T2 隨后讀取這個數(shù)據(jù)。如果 T1 撤銷了這次修改,那么 T2 讀取的數(shù)據(jù)是臟數(shù)據(jù)。3.不可重復(fù)讀:不可重復(fù)讀是指在對于數(shù)據(jù)庫的某個數(shù)據(jù),一個事務(wù)范圍內(nèi)多次查詢卻返回了不同的數(shù)據(jù)值。這是由于在查詢間隔,被另一個事務(wù)修改并提交了。例如,T2 讀取一個數(shù)據(jù),T1 對該數(shù)據(jù)做了修改。如果 T2 再次讀取這個數(shù)據(jù),此時讀取的結(jié)果和和第一次讀取的結(jié)果不同。4.幻讀(虛讀):幻讀是事務(wù)非獨立執(zhí)行時發(fā)生的一種現(xiàn)象。例如,T1 讀取某個范圍的數(shù)據(jù),T2在這個范圍內(nèi)插入新的數(shù)據(jù),T1再次讀取這個范圍的數(shù)據(jù),此時讀取的結(jié)果和和第一次讀取的結(jié)果不同。

解決方法

產(chǎn)生并發(fā)不一致性問題主要原因是破壞了事務(wù)的隔離性,解決方法是通過并發(fā)控制來保證隔離性。并發(fā)控制可以通過封鎖來實現(xiàn),但是封鎖操作都要用戶自己控制,相當(dāng)復(fù)雜。數(shù)據(jù)庫管理系統(tǒng)提供了事務(wù)的隔離級別,讓用戶以一種更輕松的方式處理并發(fā)一致性問題。

現(xiàn)在我們來看下事務(wù)的四種隔離級別。

隔離級別

1.未提交讀(READ UNCOMMITTED):事務(wù)中的修改,即使沒有提交,對其它事務(wù)也是可見的。最低級別,任何情況都無法保證。2.提交讀(READ COMMITTED):一個事務(wù)只能讀取已經(jīng)提交的事務(wù)所做的修改。換句話說,一個事務(wù)所做的修改在提交之前對其它事務(wù)是不可見的??杀苊馀K讀的發(fā)生。3.可重復(fù)讀(REPEATABLE READ):保證在同一個事務(wù)中多次讀取同樣數(shù)據(jù)的結(jié)果是一樣的。可避免臟讀、不可重復(fù)讀的發(fā)生。4.可串行化(SERIALIXABLE):強制事務(wù)串行執(zhí)行??杀苊馀K讀、不可重復(fù)讀、幻讀的發(fā)生。

四種隔離級別的對比

隔離級別臟讀不可重復(fù)讀幻讀
未提交讀YESYESYES
提交讀NOYESYES
可重復(fù)讀NONOYES
可串行化NONONO

以上四種隔離級別最高的是SERIALIXABLE(可串行化)級別,最低的是READUNCOMMITTED(未提交讀)級別,當(dāng)然級別越高,執(zhí)行效率就越低。像SERIALIXABLE(可串行化)這樣的級別, 就是以鎖表的方式使得其他的線程只能在鎖外等待,所以平時選用何種隔離級別應(yīng)該根據(jù)實際情況。

MySQL數(shù)據(jù)庫中,支持上面四種隔離級別,默認(rèn)的為REPEATABLE READ(可重復(fù)讀);而在Oracle數(shù)據(jù)庫中,只支持SERIALIXABLE(串行化)級別和READCOMMITTED(讀已提交)這兩種級別 ,其中默認(rèn)的為READ COMMITTED級別。

到此,關(guān)于“數(shù)據(jù)庫事務(wù)的概念和四大特性以及隔離級別”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI