這幾天在做專案的時候接觸到了事務的隔離級別,在這裡總結了一下。
在該隔離級別中,所有的事務可以看到其他未提交事務的結果,本隔離級別很少應用於實際。該隔離級別下,假設有事務a和事務b,事務a更新了乙份資料,事務b讀取了這份資料的內容,如果因為某些原因,事務a進行了回滾(放棄了資料的更新),此時事務b中讀取的資料就是錯誤的,由於這種情況的存在,read uncommitted也稱之為dirty read(髒讀)。
這種隔離級別是大多數資料庫系統預設的隔離級別(mysql除外),在該隔離級別下,事務b只能看到事務a已經提交的資料,這種方式就解決了髒讀的問題。但是這種方式會出現,在使用同一select語句進行查詢時,會返回不同的查詢結果,這種行為稱為不可重複讀。這是因為在查詢的過程中同一事務的其他例項在該例項處理其間可能會有新的commit。
這是mysql的預設隔離級別,該隔離級別下,保證了同乙個事務下的多個例項可以讀取到相同的資料,這就解決了不可重複讀的問題。但是這種隔離方式,又帶來新的問題,例如,事務a下讀取資料時,事務b增加了一行新的資料,當事務a再次讀這個範圍的資料時,會發現新增加了一行,與之前讀取的資料並不一致,這個增加的新行被稱之為"幻影"行,這種現象稱之為幻讀。
這是事務的最高隔離級別,在該隔離級別下,將事務a和事務b排序,使兩者不會相互發生衝突。但是這種方式的缺點也是顯而易見的,資料庫的效能會比較低,會導致大量的超時現象。
最後通過乙個**彙總一下四種隔離級別:
事務的隔離級別是乙個在面試過程中經常出現的問題,同時在涉及到事務的併發操作時,也是需要重點注意的問題。
mysql隔離級別 MySQL 事務隔離級別
mysql innodb所提供的事務滿足acid的要求,事務是通過事務日誌中的redo log和undo log來實現原子性 undo log 一致性 undo log 永續性 redo log 事務通過鎖機制實現隔離性。1 事務隔離級別與實現read uncommitted 讀未提交 read c...
mysql事務隔離級別詳解 事務的隔離級別詳解
事務的隔離級別 在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。問題的提出 資料庫是要被廣大客戶所共享訪問的,那麼在資料庫操作過程中很可能出現以下幾種不確定情況。更新丟失 兩個事務都同時更新一行資料,乙個事務對資料的更新把另乙個事務對資料的更新覆蓋了。這是因為系統沒有執行任何的...
MySQL事務隔離級別
sql標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低階別的隔離級一般支援更高的 併發處理,並擁有更低的系統開銷。read uncommitted 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,...