溫馨提示×

溫馨提示×

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

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

虛讀是不可重復(fù)讀的意思嗎

發(fā)布時(shí)間:2020-08-05 11:32:27 來源:億速云 閱讀:154 作者:Leah 欄目:互聯(lián)網(wǎng)科技

本篇文章給大家分享的是有關(guān)虛讀是不可重復(fù)讀的意思嗎,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

虛讀和不可重復(fù)讀是不一樣的。

臟讀 dirty reads:當(dāng)事務(wù)讀取還未被提交的數(shù)據(jù)時(shí),就會發(fā)生這種事件。舉例來說:Transaction 1 修改了一行數(shù)據(jù),然后 Transaction 2 在 Transaction 1 還未提交修改操作之前讀取了被修改的行。如果 Transaction 1 回滾了修改操作,那么 Transaction 2 讀取的數(shù)據(jù)就可以看作是從未存在過的。

不可重復(fù)的讀 non-repeatable reads:當(dāng)事務(wù)兩次讀取同一行數(shù)據(jù),但每次得到的數(shù)據(jù)都不一樣時(shí),就會發(fā)生這種事件。舉例來說:Transaction 1 讀取一行數(shù)據(jù),然后 Transaction 2 修改或刪除該行并提交修改操作。當(dāng) Transaction 1 試圖重新讀取該行時(shí),它就會得到不同的數(shù)據(jù)值(如果該行被更新)或發(fā)現(xiàn)該行不再存在(如果該行被刪除)。

虛讀 phantom read:如果符合搜索條件的一行數(shù)據(jù)在后面的讀取操作中出現(xiàn),但該行數(shù)據(jù)卻不屬于最初的數(shù)據(jù),就會發(fā)生這種事件。舉例來說:Transaction 1 讀取滿足某種搜索條件的一些行,然后 Transaction 2 插入了符合 Transaction 1 的搜索條件的一個(gè)新行。如果 Transaction 1 重新執(zhí)行產(chǎn)生原來那些行的查詢,就會得到不同的行。

事務(wù)場景是這樣的:

對于同一個(gè)銀行帳戶A內(nèi)有200元,甲進(jìn)行提款操作100元,乙進(jìn)行轉(zhuǎn)帳操作100元到B帳戶。如果事務(wù)沒有進(jìn)行隔離可能會并發(fā)如下問題:

1、第一類丟失更新:首先甲提款時(shí)帳戶內(nèi)有200元,同時(shí)乙轉(zhuǎn)帳也是200元,然后甲乙同時(shí)操作,甲操作成功取走100元,乙操作失敗回滾,帳戶內(nèi)最終為200元,這樣甲的操作被覆蓋掉了,銀行損失100元。

2、臟讀:甲取款100元未提交,乙進(jìn)行轉(zhuǎn)帳查到帳戶內(nèi)剩有100元,這是甲放棄操作回滾,乙正常操作提交,帳戶內(nèi)最終為0元,乙讀取了甲的臟數(shù)據(jù),客戶損失100元。

3、虛讀:和臟讀類似,是針對于插入操作過程中的讀取問題,如丙存款100元未提交,這時(shí)銀行做報(bào)表進(jìn)行統(tǒng)計(jì)查詢帳戶為200元,然后丙提交了,這時(shí)銀行再統(tǒng)計(jì)發(fā)現(xiàn)帳戶為300元了,無法判斷到底以哪個(gè)為準(zhǔn)?

大家好像覺得統(tǒng)計(jì)這個(gè)東西肯定是時(shí)時(shí)更新的,這種情況很正常;但是如果統(tǒng)計(jì)是在一個(gè)事務(wù)中的時(shí)候就不正常了,比如我們的一個(gè)統(tǒng)計(jì)應(yīng)用需要將統(tǒng)計(jì)結(jié)果分別輸出到電腦屏幕和遠(yuǎn)程網(wǎng)絡(luò)某臺計(jì)算機(jī)的磁盤文件中,為了

提高性能和用戶響應(yīng)我們分成2個(gè)線程,這時(shí)先完成的和后完成的統(tǒng)計(jì)數(shù)據(jù)就可能不一致,我們就不知道以哪個(gè)為準(zhǔn)了。

4、不可重復(fù)讀:甲乙同時(shí)開始都查到帳戶內(nèi)為200元,甲先開始取款100元提交,這時(shí)乙在準(zhǔn)備最后更新的時(shí)候又進(jìn)行了一次查詢,發(fā)現(xiàn)結(jié)果是100元,這時(shí)乙就會很困惑,不知道該將帳戶改為100還是0。

和臟讀的區(qū)別是,臟讀是讀取前一事務(wù)未提交的臟數(shù)據(jù),不可重復(fù)讀是重新讀取了前一事務(wù)已提交的數(shù)據(jù)。

5、第二類丟失更新:是不可重復(fù)讀的一種特例,如上,乙不做第二次查詢而是直接操作完成,帳戶內(nèi)最終為100元,甲的操作被覆蓋掉了,銀行損失100元。感覺和第一類丟失更新類似。

以上就是虛讀是不可重復(fù)讀的意思嗎,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

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

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

AI