作者:小朋友
鏈接:https://www.zhihu.com/question/47007926/answer/253406510
來源:知乎
著作權(quán)歸作者所有院塞。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)磁浇,非商業(yè)轉(zhuǎn)載請注明出處跌榔。
臟讀:(同時操作都沒提交的讀取)
臟讀又稱無效數(shù)據(jù)讀出琼了。一個事務(wù)讀取另外一個事務(wù)還沒有提交的數(shù)據(jù)叫臟讀。
例如:事務(wù)T1修改了一行數(shù)據(jù),但是還沒有提交猜谚,這時候事務(wù)T2讀取了被事務(wù)T1修改后的數(shù)據(jù),之后事務(wù)T1因為某種原因Rollback了赌渣,那么事務(wù)T2讀取的數(shù)據(jù)就是臟的魏铅。
解決辦法:把數(shù)據(jù)庫的事務(wù)隔離級別調(diào)整到READ_COMMITTED
不可重復(fù)讀:(同時操作,事務(wù)一分別讀取事務(wù)二操作時和提交后的數(shù)據(jù)锡垄,讀取的記錄內(nèi)容不一致)
不可重復(fù)讀是指在同一個事務(wù)內(nèi)沦零,兩個相同的查詢返回了不同的結(jié)果。
例如:事務(wù)T1讀取某一數(shù)據(jù)货岭,事務(wù)T2讀取并修改了該數(shù)據(jù)路操,T1為了對讀取值進行檢驗而再次讀取該數(shù)據(jù),便得到了不同的結(jié)果千贯。 解決辦法:把數(shù)據(jù)庫的事務(wù)隔離級別調(diào)整到REPEATABLE_READ
幻讀:(幻讀是不可重復(fù)讀的特殊場景屯仗,但是事務(wù)二的數(shù)據(jù)操作僅僅是插入和刪除,不是修改數(shù)據(jù)搔谴,讀取的記錄數(shù)量前后不一致)
例如:系統(tǒng)管理員A將數(shù)據(jù)庫中所有學(xué)生的成績從具體分?jǐn)?shù)改為ABCDE等級魁袜,但是系統(tǒng)管理員B就在這個時候插入(注意時插入或者刪除,不是修改))了一條具體分?jǐn)?shù)的記錄敦第,當(dāng)系統(tǒng)管理員A改結(jié)束后發(fā)現(xiàn)還有一條記錄沒有改過來峰弹,就好像發(fā)生了幻覺一樣。這就叫幻讀芜果。
解決辦法:把數(shù)據(jù)庫的事務(wù)隔離級別調(diào)整到SERIALIZABLE_READ
通過在寫的時候加鎖鞠呈,可以解決臟讀。
通過在讀的時候加鎖右钾,可以解決不可重復(fù)讀蚁吝。