MySQL事務(wù)隔離級別

數(shù)據(jù)庫事務(wù)的隔離級別有4種,由低到高分別為Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事務(wù)的并發(fā)操作中可能會出現(xiàn)臟讀,不可重復(fù)讀,幻讀。下面通過事例一一闡述它們的概念與聯(lián)系。

Read uncommitted

讀未提交,顧名思義,就是一個事務(wù)可以讀取另一個未提交事務(wù)的數(shù)據(jù)。

事例:老板要給程序員發(fā)工資,程序員的工資是3.6萬/月。但是發(fā)工資時老板不小心按錯了數(shù)字,按成3.9萬/月,該錢已經(jīng)打到程序員的戶口,但是事務(wù)還沒有提交,就在這時,程序員去查看自己這個月的工資,發(fā)現(xiàn)比往常多了3千元,以為漲工資了非常高興。但是老板及時發(fā)現(xiàn)了不對,馬上回滾差點(diǎn)就提交了的事務(wù),將數(shù)字改成3.6萬再提交。

分析:實(shí)際程序員這個月的工資還是3.6萬,但是程序員看到的是3.9萬。他看到的是老板還沒提交事務(wù)時的數(shù)據(jù)。這就是臟讀。


那怎么解決臟讀呢?Read committed!讀提交,能解決臟讀問題。


Read committed

讀提交,顧名思義,就是一個事務(wù)要等另一個事務(wù)提交后才能讀取數(shù)據(jù)。

事例:程序員拿著信用卡去享受生活(卡里當(dāng)然是只有3.6萬),當(dāng)他埋單時(程序員事務(wù)開啟),收費(fèi)系統(tǒng)事先檢測到他的卡里有3.6萬,就在這個時候??!程序員的妻子要把錢全部轉(zhuǎn)出充當(dāng)家用,并提交。當(dāng)收費(fèi)系統(tǒng)準(zhǔn)備扣款時,再檢測卡里的金額,發(fā)現(xiàn)已經(jīng)沒錢了(第二次檢測金額當(dāng)然要等待妻子轉(zhuǎn)出金額事務(wù)提交完)。程序員就會很郁悶,明明卡里是有錢的…

分析:這就是讀提交,若有事務(wù)對數(shù)據(jù)進(jìn)行更新(UPDATE)操作時,讀操作事務(wù)要等待這個更新操作事務(wù)提交后才能讀取數(shù)據(jù),可以解決臟讀問題。但在這個事例中,出現(xiàn)了一個事務(wù)范圍內(nèi)兩個相同的查詢卻返回了不同數(shù)據(jù),這就是不可重復(fù)讀。


那怎么解決可能的不可重復(fù)讀問題?Repeatable read !


Repeatable read

重復(fù)讀,就是在開始讀取數(shù)據(jù)(事務(wù)開啟)時,不再允許修改操作

事例:程序員拿著信用卡去享受生活(卡里當(dāng)然是只有3.6萬),當(dāng)他埋單時(事務(wù)開啟,不允許其他事務(wù)的UPDATE修改操作),收費(fèi)系統(tǒng)事先檢測到他的卡里有3.6萬。這個時候他的妻子不能轉(zhuǎn)出金額了。接下來收費(fèi)系統(tǒng)就可以扣款了。

分析:重復(fù)讀可以解決不可重復(fù)讀問題。寫到這里,應(yīng)該明白的一點(diǎn)就是,不可重復(fù)讀對應(yīng)的是修改,即UPDATE操作。但是可能還會有幻讀問題。因為幻讀問題對應(yīng)的是插入INSERT操作,而不是UPDATE操作。


什么時候會出現(xiàn)幻讀?

事例:程序員某一天去消費(fèi),花了2千元,然后他的妻子去查看他今天的消費(fèi)記錄(全表掃描FTS,妻子事務(wù)開啟),看到確實(shí)是花了2千元,就在這個時候,程序員花了1萬買了一部電腦,即新增INSERT了一條消費(fèi)記錄,并提交。當(dāng)妻子打印程序員的消費(fèi)記錄清單時(妻子事務(wù)提交),發(fā)現(xiàn)花了1.2萬元,似乎出現(xiàn)了幻覺,這就是幻讀。


那怎么解決幻讀問題?Serializable!


Serializable 序列化

Serializable 是最高的事務(wù)隔離級別,在該級別下,事務(wù)串行化順序執(zhí)行,可以避免臟讀、不可重復(fù)讀與幻讀。但是這種事務(wù)隔離級別效率低下,比較耗數(shù)據(jù)庫性能,一般不使用。


很高興認(rèn)識你,我們都一樣,有過迷茫卻從未放棄;害怕孤獨(dú)可從不寂寞。

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

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

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