1. 程式人生 > 實用技巧 >MySQL專題: 髒讀、不可重複讀、幻讀區別

MySQL專題: 髒讀、不可重複讀、幻讀區別

轉載:MySQL專題: 髒讀、不可重複讀、幻讀區別

目錄

髒讀(Dirty Read)

不可重複讀

幻讀

幻讀和不可重複讀的區別


髒讀(Dirty Read)

讀取到了未提交的資料(如果事務這時候回滾了,那麼第二個事務就讀到了髒資料)

原因可能有:

(1)有一個交叉的事務有新的commit,導致了資料的改變;

(2)一個數據庫被多個例項操作時,同一事務的其他例項在該例項處理其間可能會有新的commit。

不可重複讀

同一個事務中,對於同一資料,執行完全相同的select語句時可能看到不一樣的結果。

幻讀

當用戶讀取某一範圍的資料行時,另一個事務又在該範圍內插入了新行,當用戶再讀取該範圍的資料行時,會發現有新的“幻影” 行;

InnoDB和Falcon儲存引擎通過多版本併發控制(MVCC,Multiversion Concurrency Control)機制解決了該問題。

>>MVCC多版本併發控制工作原理

幻讀和不可重複讀的區別

不可重複讀

重點是修改:在同一事務中,同樣的條件,第一次讀的資料和第二次讀的資料不一樣。(一個事務多次讀取同一範圍內資料時,另外一個發生了事務發生insert操作並提交了)。資料變化。

幻讀

重點在於新增或者刪除:在同一事務中,同樣的條件,,第一次和第二次讀出來的記錄數不一樣。(一個事務多次讀取同一條資料時,另外一個發生了事務發生update,delete操作並提交了。insert操作一條新資料並不會影響剛才被讀的那條資料。)。行數變化。