read uncommitted(未提交讀)
在這個級別中,事務的修改即使沒有提交,對其他事務也都是可見的。事務可以讀取未提交的資料,這也被稱為髒讀。這個級別會導致很多問題,從效能上來說,未提交讀不會比其他級別好很多,但卻缺乏其他級別的很多好處,除非真的有很必要的理由,在實際應用中一般很少使用。
read comitted(提交讀)
大多數資料庫的預設隔離級別是提交讀(mysql不是),提交讀滿足前面的隔離性的定義:乙個事務開始時,只能看到已提交的事務的修改。換句話說,乙個事務從開始到提交之前, 所做的任何修改對其他事務都是不可見的。這個級別有時候也叫不可重複讀,因為兩次同樣的查詢,可能得到不一樣的結果。
repeatable read(可重複讀)
可重複讀解決了髒讀的問題。該級別保證了在同乙個事務中多次讀取同樣記錄的結果是一致的。但是理論上,可重複讀還是無法解決幻讀的問題。所謂幻讀,是指乙個事務在讀取某個範圍內的記錄時,另外乙個事務又在該範圍內插入了新的記錄,之前的事務再次讀取該範圍內的記錄時,會產生幻行。innodb和xtradb解決了幻讀的問題。
可重複讀是mysql的預設事務隔離級別。
serializable(可序列化)
序列化是事務的最高隔離級別。它通過強制事務序列執行,避免了幻讀的問題。簡單來說,可序列化級別會在讀取的每一行資料上都加鎖,所以可能導致大量的超時和鎖爭用的問題。實際中也很少用到這個隔離級別。只有在非常需要確保資料一致性而且可以接受沒有併發的情況下,才考慮採用該級別。
隔離級別
髒讀可能性
不可重複讀可能性
幻讀可能性
加鎖讀read uncommited
yesyes
yesno
read comitted
noyes
yesno
repeatable read
nono
yesno
serializable
nono
noyes
手打,摘自《高效能mysql》
資料庫事務四種隔離級別
定義 在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。資料庫事務的隔離級別有4個,由低到高依次為read uncommitted 未授權讀取 讀未提交 read committed 授權讀取 讀提交 repeatable read 可重複讀取 serializable 序列化 ...
資料庫事務四種隔離級別
定義 在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。資料庫事務的隔離級別有4個,由低到高依次為read uncommitted 未授權讀取 讀未提交 read committed 授權讀取 讀提交 repeatable read 可重複讀取 serializable 序列化 ...
資料庫事務四種隔離級別
定義 在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。資料庫事務的隔離級別有4個,由低到高依次為read uncommitted 未授權讀取 讀未提交 read committed 授權讀取 讀提交 repeatable read 可重複讀取 serializable 序列化 ...