mysql事務隔離級別 髒讀,不可重複讀,幻象讀

1.事務裏一些有問題的讀取:髒讀,不可重複讀,幻象讀 數據庫

髒讀 (dirty read)事務T1更新了一行記錄的內容,可是並無提交所作的修改。事務T2讀取更新後的行,而後T1執行回滾操做,取消了剛纔所作的修改。如今T2所讀取的行就無效了。 事務

不可重複讀取 (nonrepeatable read)事務T1讀取一行記錄,緊接着事務T2修改 了T1剛纔讀取的那一行記錄。而後T1又再次讀取這行記錄,發現與剛纔讀取的結果不一樣。這就稱爲「不可重複」讀,由於T1原來讀取的那行記錄已經發生了變化。 table

幻像讀取 (phantom read)事務T1讀取一條指定的WHERE子句所返回的結果集。而後事務T2新插入 一行記錄,這行記錄剛好能夠知足T1所使用的查詢條件中的WHERE 子句的條件。而後T1又使用相同的查詢再次對錶進行檢索,可是此時卻看到了事務T2剛纔插入的新行。這個新行就稱爲「幻像」,由於對T1來講這一行就像突 然出現的同樣。 數據

2.事務的隔離級別 查詢

從級別低到高依次爲: tab

READ UNCOMMITTED 幻像讀、不可重複讀和髒讀都容許。 di

READ COMMITTED 容許幻像讀、不可重複讀,但不容許髒讀。 ant

REPEATABLE READ 容許幻像讀,但不容許不可重複讀和髒讀。InnoDB默認級別 ab

SERIALIZABLE 幻像讀、不可重複讀和髒讀都不容許。

可是InnoDB的可重複讀隔離級別和其餘數據庫的可重複讀是有區別的,不會形成幻象讀(phantom read)。

ORACLE數據庫支持 READ COMMITTED 和 SERIALIZABLE ,不支持 READ UNCOMMITTED 和 REPEATABLE READ
相關文章
相關標籤/搜索