mysql 髒資料是什麼 什麼是髒讀?

2021-10-20 22:35:13 字數 803 閱讀 4122

什麼是髒讀?

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

解決方法

mysql資料庫定義了四種隔離級別:serializable:可避免髒讀、不可重複讀、虛讀情況的發生。

repeatable read:可以避免髒讀、不可重複讀情況的發生。

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

read uncommitted:最低級別,都會發生。注意:事務的隔離級別收到資料庫的限制,不同的資料庫支援的隔離級別不一定相同

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

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

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

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

MySQL所謂的髒頁和「抖」一下是什麼聯絡?

在我們平時經常用到的sql更新語句,之前是認為只要sql執行,當前sql的操作會立馬執行到伺服器磁碟上並返回,但是後來我才知道,事實並非如此,在了解事實之前,首先可能需要先了解什麼是redo log,什麼是buffer pool,什麼是changebuffer以及資料頁。首先,我們用一種比喻的手法,...

什麼是髒讀 不可重複讀 幻讀

在事務a修改資料之後提交資料之前,這時另乙個事務b來讀取資料,如果不加控制,事務b讀取到a修改過資料,之後a又對資料做了修改再提交,則b讀到的資料是髒資料,此過程稱為髒讀dirty read。乙個事務內在讀取某些資料後的某個時間,再次讀取以前讀過的資料,卻發現其讀出的資料已經發生了變更 或者某些記錄...

什麼是髒讀?幻讀?不可重複讀?

sql 標準定義了四個隔離級別 這裡需要注意的是 mysql 預設採用的 repeatable read隔離級別 oracle 預設採用的 read committed隔離級別 事務隔離機制的實現基於鎖機制和併發排程。其中併發排程使用的是mvvc 多版本併發控制 通過儲存修改的舊版本資訊來支援併發一...