MySQL事務的隔離級別

2021-07-22 17:54:11 字數 921 閱讀 6704

設定的目的

在資料庫操作中,為了有效保證併發讀取資料的正確性,提出事務的隔離級別。

資料庫事務併發帶來的問題

為了避免上面出現的幾種情況,在標準的sql規範中,定義了四個事務隔離級別,不同的隔離級別對事務的處理不同。

read uncommitted(讀取未提交內容)

在該隔離級別,所有的事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,因為它的效能也不必其他級別好多少。

read committed(讀取提交內容)

這是大多數資料庫預設的隔離級別(但mysql預設的是repeatable read)。它滿足了隔離的簡單定義:乙個事務只能看見已經提交事務所做的改變。這種事務隔離級別也支援不可重複讀,因為同一事務的其他例項在該例項處理期間可能會有新的commit,所以同一select可能返回不同的結果。

repeatable read(可重讀)

這是mysql預設的事務隔離級別,它確保同一事物的多個例項在併發讀取資料時,會看到同樣的資料行。不過理論上,這會導致乙個棘手的問題:幻讀。innodb和falcon儲存引擎通過多版本併發控制機制解決了該問題。

serializable(可序列化)

這是最高的隔離級別,它通過強制事務排序,使之不可能相互衝突,從而解決幻讀問題。簡言之,它是在每個讀的資料行上加上共享鎖。在這個級別,可能導致大量超時現象和鎖競爭。

在mysql中,實現了這四種隔離級別,分別有可能產生問題如下:

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 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,...