并發(fā)事務(wù)引起的問題
1.更新丟失(Lost Update)
兩個事務(wù)都同時更新一行數(shù)據(jù),但是第二個事務(wù)卻中途失敗退出,導(dǎo)致對數(shù)據(jù)的兩個修改都失效了。這是因為系統(tǒng)沒有執(zhí)行任何的鎖操作,因此并發(fā)事務(wù)并沒有被隔離開來。
2.臟讀(Dirty Read)
又稱無效數(shù)據(jù)讀出。一個事務(wù)讀取另外一個事務(wù)還沒有提交的數(shù)據(jù)叫臟讀。
例如:事務(wù)T1修改了一行數(shù)據(jù),但是還沒有提交,這時候事務(wù)T2讀取了被事務(wù)T1修改后的數(shù)據(jù),之后事務(wù)T1因為某種原因Rollback了,那么事務(wù)T2讀取的數(shù)據(jù)就是臟的。
3.不可重復(fù)讀(Non-Repeatable Read)
是指在一個事務(wù)中兩次讀同一行數(shù)據(jù),可是這兩次讀到的數(shù)據(jù)不一樣。
例如:事務(wù)T1讀取某一數(shù)據(jù),事務(wù)T2讀取并修改了該數(shù)據(jù),T1為了對讀取值進行檢驗而再次讀取該數(shù)據(jù),便得到了不同的結(jié)果。
4.幻讀
事務(wù)在操作過程中進行兩次查詢,第二次查詢的結(jié)果包含了第一次查詢中未出現(xiàn)的數(shù)據(jù)或者缺少了第一次查詢中出現(xiàn)的數(shù)據(jù)
例如:系統(tǒng)管理員A將數(shù)據(jù)庫中所有學(xué)生的成績從具體分數(shù)改為ABCDE等級,但是系統(tǒng)管理員B就在這個時候插入了一條具體分數(shù)的記錄,當系統(tǒng)管理員A改結(jié)束后發(fā)現(xiàn)還有一條記錄沒有改過來,就好像發(fā)生了幻覺一樣。這就叫幻讀。
不可重復(fù)讀重點在于update和delete,而幻讀的重點在于insert。所以說不可重復(fù)讀和幻讀最大的區(qū)別,就在于如何通過鎖機制來解決他們產(chǎn)生的問題。
以上就是長沙達內(nèi)教育java培訓(xùn)機構(gòu)的小編針對“Java數(shù)據(jù)庫基礎(chǔ)視頻,并發(fā)事務(wù)”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。