Mysql之事務(二)
阿新 • • 發佈:2018-11-07
文章目錄
隔離級別
1.READ_UNCOMMITTED(未提交讀)。 在未提交讀的隔離級別下,事務A對資料做的修改,即使沒有提交,對於事務B來說也是可見的,這種問題叫髒讀。這是隔離程度較低的一種隔離級別,在實際運用中會引起很多問題,因此一般不常用。 2.READ_COMMITTED(提交讀)。 在提交讀的隔離級別下,不會出現髒讀的問題。事務A對資料做的修改,提交之後會對事務B可見,舉例,事務B開啟時讀到資料1,接下來事務A開啟,把這個資料改成2,提交,B再次讀取這個資料,會讀到最新的資料2。在提交讀的隔離級別下,會出現不可重複讀的問題。這個隔離級別是許多資料庫的預設隔離級別。 3.REPEATABLE READ(可重複讀)。 在可重複讀的隔離級別下,不會出現不可重複讀的問題。事務A對資料做的修改,提交之後,對於先於事務A開啟的事務是不可見的。舉例,事務B開啟時讀到資料1,接下來事務A開啟,把這個資料改成2,提交,B再次讀取這個資料,仍然只能讀到1。在可重複讀的隔離級別下,會出現幻讀的問題。幻讀的意思是,當某個事務在讀取某個範圍內的值的時候,另外一個事務在這個範圍內插入了新記錄,那麼之前的事務再次讀取這個範圍的值,會讀取到新插入的資料。Mysql預設的隔離級別是可重複讀,然而mysql的innoDB引擎間隙鎖成功解決了幻讀的問題。 4.SERIALIZABLE(可序列化)。 可序列化是最高的隔離級別。這種隔離級別強制要求所有事物序列執行,在這種隔離級別下,讀取的每行資料都加鎖,會導致大量的鎖徵用問題,效能最差。 Mysql預設的隔離級別是REPEATABLE READ
比較
隔離級別 | 讀資料一致性 | 髒讀 | 不可重複讀 | 幻讀 |
---|---|---|---|---|
未提交讀 | 最低級別,只能保證不讀取物理上損壞的資料 | 是 | 是 | 是 |
已提交讀 | 語句級 | 否 | 是 | 是 |
可重複讀 | 事物級 | 否 | 否 | 是 |
序列化 | 最高階,事物級 | 否 | 否 | 否 |