首頁 >資料庫 >mysql教程 >什麼是髒讀?

什麼是髒讀?

Guanhui
Guanhui原創
2020-06-01 16:12:256817瀏覽

什麼是髒讀?

什麼是髒讀?

髒讀又稱無效資料的讀出,是指在資料庫存取中,事務T1將某一值修改,然後事務T2讀取該值,此後T1因為某種原因撤銷對該值的修改,這就導致了T2所讀取到的資料是無效的,值得注意的是,髒讀一般是針對於update操作的。

解決方法

mysql資料庫定義了四個隔離等級:

  • serializable:可避免髒讀、不可重複讀、虛讀情況的發生。

  • repeatable read:可以避免髒讀、無法重複讀取情況的發生。

  • read committed:可以避免髒讀狀況發生。

  • read uncommitted:最低級別,都會發生。

  注意:交易的隔離等級收到資料庫的限制,不同的資料庫支援的隔離等級不一定相同

        髒讀:修改時加排他鎖,直到事務提交後才釋放,讀取時加上共享鎖後(這樣在事務1讀取數據的過程中,其他事務就不會修改該數據),不允許任何事務操作該數據,只能讀取,之後1如果有更新操作,那麼會轉換為排他鎖,其他事務更無權參與進來讀寫,這樣就防止了髒讀問題

        但是當事務1讀取資料過程中,有可能其他事務也讀取了該數據,讀取完畢後共享鎖釋放,此時事務1修改數據,修改完畢提交事務,其他事務再次讀取數據時候發現數據不一致,就會出現先不可重複讀取問題,所以這樣不能避免不可重複讀取問題

       當執行不同的隔離等級時,可能會發生各種不同的問題。以下對他們進行總結並舉例說明:

       臟讀取發生在一個事務A讀取了被另一個事務B修改,但是尚未提交的資料。假如B回退,則事務A讀取的是無效的資料。這跟不可重複讀取類似,但是第二個交易不需要執行提交。


推薦教學:《PHP教學》《MySQL教學

以上是什麼是髒讀?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn