1. 程式人生 > >Mysql之事務(二)

Mysql之事務(二)

文章目錄

隔離級別

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

比較

隔離級別 讀資料一致性 髒讀 不可重複讀 幻讀
未提交讀 最低級別,只能保證不讀取物理上損壞的資料
已提交讀 語句級
可重複讀 事物級
序列化 最高階,事物級