MySQL專題: 髒讀、不可重複讀、幻讀區別
阿新 • • 發佈:2020-10-11
目錄
髒讀(Dirty Read)
讀取到了未提交的資料(如果事務這時候回滾了,那麼第二個事務就讀到了髒資料)
原因可能有:
(1)有一個交叉的事務有新的commit,導致了資料的改變;
(2)一個數據庫被多個例項操作時,同一事務的其他例項在該例項處理其間可能會有新的commit。
不可重複讀
同一個事務中,對於同一資料,執行完全相同的select語句時可能看到不一樣的結果。
幻讀
當用戶讀取某一範圍的資料行時,另一個事務又在該範圍內插入了新行,當用戶再讀取該範圍的資料行時,會發現有新的“幻影” 行;
InnoDB和Falcon儲存引擎通過多版本併發控制(MVCC,Multiversion Concurrency Control)機制解決了該問題。
幻讀和不可重複讀的區別
不可重複讀
重點是修改:在同一事務中,同樣的條件,第一次讀的資料和第二次讀的資料不一樣。(一個事務多次讀取同一範圍內資料時,另外一個發生了事務發生insert操作並提交了)。資料變化。
幻讀
重點在於新增或者刪除:在同一事務中,同樣的條件,,第一次和第二次讀出來的記錄數不一樣。(一個事務多次讀取同一條資料時,另外一個發生了事務發生update,delete操作並提交了。insert操作一條新資料並不會影響剛才被讀的那條資料。)。行數變化。