MySQL事務隔離級別

2021-06-26 18:45:06 字數 1871 閱讀 8724

read uncommitted (未提交讀)

在 read uncommitted 級別,事務中的修改,即使沒有提交,對其他事務也都是可見的。事務可以讀取未提交的資料,這也被稱為髒讀(dirty read)。這個級別會導致很多問題,從效能上來說,read uncommitted 不會比其他的級別好太多,但卻缺乏其他級別的很多好處,除非真的非常必要的理由,在實際應用中一般很少使用。

read committed(提交讀)

大多數資料庫系統的預設隔離級別都是 read committed(但mysql不是)。read committed 滿足前面提到的隔離性的簡單定義:乙個事務開始,只能「看見」已經提交的事務所做的修改。換句話說,乙個事務從開始直到事務提交之前,所做的任何修改對其他事務都是不可見的。這個級別有時候也叫做不可重複讀(nonrepeatable read),因為兩次執行同樣的查詢,可能會得到不一樣的結果。

repeatable read(可重複讀)

repeatable read 解決了髒讀問題。該級別保證了在同乙個事務中多次讀取同樣記錄的結果是一致的。但是理論上,可重複讀隔離級別還是無法解決另外乙個幻讀(phantom read)的問題。所謂幻讀,指的是當某個事務在讀取某個範圍內的記錄時,另外乙個事務又在該範圍內插入新的記錄,當之前的事務再次讀取該範圍的記錄時,會產生幻行(phantom row)。innodb 和 xtradb 儲存引擎通過多版本併發控制(mvcc,multiversion concurrency control)解決了幻讀的問題。

可重複讀是 mysql 的預設事務隔離級別。

serializable(可序列化)

serializable 是最高的隔離級別。它通過強制事務序列化執行,避免了前面說的幻讀的問題。簡單來說,serializable 會在讀取的每一行資料都加上鎖,所以可能導致大量的超時和鎖爭用的問題。實際應用中也很少用到這個隔離級別,只有在非常需要確保資料的一致性而且可以接受沒有併發的情況下,才考慮採用該級別。

隔離級別

髒讀可能性

不可重複讀可能性

幻讀可能性

加鎖讀read uncommitted

yesyes

yesno

read committed

noyes

yesno

repeatable read

nono

yesno

serializable

nono

noyes

(以上摘自《高效能mysql》)

髒讀,意味著乙個事務讀取了另乙個事務未提交的資料:

事務1:更新一條記錄

-----------------------------------------> 事務2:查詢事務1更新的記錄

事務1:回滾事務

不可重複讀,是指在資料庫訪問中,乙個事務範圍內兩個相同的查詢卻返回了不同資料:

事務1:查詢一條記錄

----------------------------------------->事務2:更新事務1查詢的記錄

----------------------------------------->事務2:提交事務

事務1:再次查詢同一條記錄

幻讀,指的是當某個事務在讀取某個範圍內的記錄時,另外乙個事務又在該範圍內插入新的記錄,當之前的事務再次讀取該範圍的記錄時,會產生幻行:

事務1:查詢表中的所有記錄

----------------------------------------->事務2:在同一張表中插入一條記錄

事務1:再次查詢表中的所有記錄

mysql隔離級別 MySQL 事務隔離級別

mysql innodb所提供的事務滿足acid的要求,事務是通過事務日誌中的redo log和undo log來實現原子性 undo log 一致性 undo log 永續性 redo log 事務通過鎖機制實現隔離性。1 事務隔離級別與實現read uncommitted 讀未提交 read c...

MySQL事務隔離級別

sql標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低階別的隔離級一般支援更高的 併發處理,並擁有更低的系統開銷。read uncommitted 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,...

Mysql 事務隔離級別

mysql 5.5預設儲存引擎 表型別 使用的是innodb,它是支援acid特性的 acid,指資料庫的原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 乙個支援事務 transaction 的資料庫系統,必需要具有這四種特性,否...