虛讀就是不可重複讀取嗎?
虛讀和不可重複讀是不一樣的。
髒讀 dirty reads:當交易讀取尚未提交的資料時,就會發生這種事件。舉例來說:Transaction 1 修改了一行數據,然後 Transaction 2 在 Transaction 1 還未提交修改操作之前讀取了被修改的行。如果 Transaction 1 回滾了修改操作,那麼 Transaction 2 讀取的資料就可以看成是從未存在過的。
不可重複的讀取 non-repeatable reads:當交易兩次讀取同一行數據,但每次得到的數據都不一樣時,就會發生這種事件。舉例來說:Transaction 1 讀取一行數據,然後 Transaction 2 修改或刪除該行並提交修改操作。當 Transaction 1 試圖重新讀取該行時,它就會得到不同的資料值(如果該行被更新)或發現該行不再存在(如果該行被刪除)。
虛讀 phantom read:如果符合搜尋條件的一行資料在後面的讀取操作中出現,但該行資料卻不屬於最初的數據,就會發生這種事件。舉例來說:Transaction 1 讀取滿足某種搜尋條件的一些行,然後 Transaction 2 插入了符合 Transaction 1 的搜尋條件的一個新行。如果 Transaction 1 重新執行產生原來那些行的查詢,就會得到不同的行。
交易場景是這樣的:
對於同一個銀行帳戶A內有200元,甲進行提款操作100元,乙進行轉帳操作100元到B帳戶。如果交易沒有進行隔離可能會並發如下問題:
1、第一類遺失更新:首先甲提款時帳戶內有200元,同時乙轉帳也是200元,然後甲乙同時操作,甲操作成功取走100元,乙操作失敗回滾,帳戶內最終為200元,這樣甲的操作被覆蓋掉了,銀行損失100元。
2、髒讀:甲取款100元未提交,乙進行轉帳查到帳戶內剩有100元,這是甲放棄操作回滾,乙正常操作提交,帳戶內最終為0元,乙讀取了甲的髒數據,客戶損失100元。
3、虛讀:和髒讀類似,是針對於插入作業過程中的讀取問題,如丙存款100元未提交,這時銀行做報表進行統計查詢帳戶為200元,然後丙提交了,這時銀行再統計發現帳戶為300元了,無法判斷到底以哪個為準?
大家好像覺得統計這個東西肯定是時時更新的,這種情況很正常;但是如果統計是在一個事務中的時候就不正常了,比如我們的一個統計應用需要將統計結果分別輸出到電腦螢幕和遠端網路某台電腦的磁碟檔案中,為了
提高效能和使用者回應我們分成2個線程,這時先完成的和後完成的統計資料就可能不一致,我們就不知道以哪個為準了。
4、不可重複讀:甲乙同時開始都查到帳戶內為200元,甲先開始取款100元提交,這時乙在準備最後更新的時候又進行了一次查詢,發現結果是100元,這時乙就會很困惑,不知道該將帳戶改為100還是0。
和髒讀的區別是,臟讀是讀取前一事務未提交的髒數據,不可重複讀是重新讀取了前一事務已提交的數據。
5、第二類遺失更新:是不可重複讀取的一種特例,如上,乙不做第二次查詢而是直接操作完成,帳戶內最終為100元,甲的操作被覆蓋掉了,銀行損失100元。感覺和第一類丟失更新類似。
以上是虛讀就是不可重複讀嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

記事本++7.3.1
好用且免費的程式碼編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Dreamweaver CS6
視覺化網頁開發工具