MySQL隔離級別

前一個文章講述了事務(wù)ACID的特性以及并發(fā)事務(wù)造成的數(shù)據(jù)不一致性問題,事務(wù)ACID以及不一致性問題,接下來講解下MySQL中隔離級別。

MySQL隔離級別

因為上述的幾個數(shù)據(jù)不一致性問題,MySQL主要提供了四個隔離級別來解決這些問題,用一個表格來描述各個隔離級別解決的以及還存在的不一致問題。
(??表示還是有這種現(xiàn)象,??表示不會出現(xiàn)這個問題)

隔離級別 臟讀 不可重復(fù)讀 幻讀
讀未提交 ?? ?? ??
讀已提交 ?? ?? ??
可重復(fù)讀 ?? ?? ??
串行化 ?? ?? ??

串行化的隔離級別最高,讀未提交的隔離級別最低。隔離級別越高,說明事務(wù)的并發(fā)度越低,當(dāng)然執(zhí)行效率也越低。接下來具體講解下這幾個隔離級別,應(yīng)用中根據(jù)實際情況來選擇隔離級別,MySQL默認隔離級別為可重復(fù)讀,可以通過以下命令查看系統(tǒng)級、會話級的默認隔離級別。

mysql查看默認隔離級別.png

講隔離級別之前,先說下共享鎖(讀鎖)和排他鎖(寫鎖)。
讀鎖S:若事務(wù)T對數(shù)據(jù)對象A加了讀鎖,其他事務(wù)可以對數(shù)據(jù)A再加讀鎖,但不能加寫鎖,直到釋放了數(shù)據(jù)A上的讀鎖。
寫鎖X:若事務(wù)T對數(shù)據(jù)對象A加了寫鎖,則只有事務(wù)T可以對數(shù)據(jù)A進行讀取和修改,其他事務(wù)只能等T事務(wù)釋放了數(shù)據(jù)的寫鎖才可以對數(shù)據(jù)A進行操作。

讀未提交Read uncommitted

該隔離級別下,所有事務(wù)都可以讀取到其他事務(wù)沒有提交的處理結(jié)果。很少用于實際應(yīng)用,因為不能保證數(shù)據(jù)的一致性。

讀已提交Read committed

大多數(shù)數(shù)據(jù)庫采用的默認隔離級別,如Oracle。讀已提交隔離級別下,讀取不加鎖,寫加鎖,即數(shù)據(jù)的刪除、修改及寫入都需要加鎖,使得事務(wù)只能看到其他事務(wù)已經(jīng)提交的數(shù)據(jù),避免了臟讀。

可重復(fù)讀Repeated read

解決臟讀和不可重復(fù)讀的數(shù)據(jù)不一致性問題,保證同一事務(wù)的多個實例訪問數(shù)據(jù)時,讀到的結(jié)果是一致的。

串行化Serializable

完全串行化,讀操作加鎖,寫操作加鎖,讀寫鎖互相阻塞。這個隔離級別下,可能會造成大量的超時以及鎖競爭現(xiàn)象。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容