古詩詞大全網 - 成語故事 - 事務隔離的四個級別是什麽?

事務隔離的四個級別是什麽?

事務隔離的四個級別是未提交讀(Read Uncommitted)、提交讀(Read Committed)、可重復讀(Repeable Read)、可串行化(Serializable)。

1、未提交讀(Read Uncommitted):事務可以讀取未提交的數據,也稱作臟讀(Dirty Read)。壹般很少使用。

2、提交讀(Read Committed):是大都是DBMS(如:Oracle,SQLServer)默認事務隔離。執行兩次同意的查詢卻有不同的結果,也叫不可重復讀。

3、可重復讀(Repeable Read):是MySQL默認事務隔離級別。能確保同壹事務多次讀取同壹數據的結果是壹致的。可以解決臟讀的問題,但理論上無法解決幻讀(Phantom Read)的問題。

4、可串行化(Serializable):是最高的隔離級別。強制事務串行執行,會在讀取的每壹行數據上加鎖,這樣雖然能避免幻讀的問題,但也可能導致大量的超時和鎖爭用的問題。很少會應用到這種級別,只有在非常需要確保數據的壹致性且可以接受沒有並發的應用場景下才會考慮。

事務隔離級別特點比較

從事務隔離級別的定義上可以看出,Serializable級別隔離性最高,但是其效率也最低,因為其要求所有操作相同記錄的事務都串行的執行。

對於MySql而言,其默認事務級別是Repeatable read,雖然在定義上講,這種隔離級別無法解決幻讀的問題,但是MySql使用了壹種Next key-lock的算法來實現Repeatable read,這種算法是能夠解決幻讀問題的。

關於Next key-lock算法,在進行查詢時,其不僅會將當前的操作記錄鎖住,也會將查詢所涉及到的範圍鎖住。

也就是說,其他事務如果想要在當前事務查詢的範圍內進行數據操作,那麽其是會被阻塞的,因而MySql在Repeatable read隔離級別下就已經具備了Serializable隔離級別的事務隔離性。

以上內容參考:百度百科-隔離級別