數(shù)據(jù)庫(kù)的并發(fā)操作通常會(huì)帶來(lái)丟失更新問(wèn)題,不一致分析問(wèn)題和“臟數(shù)據(jù)”的讀出問(wèn)題。
相關(guān)知識(shí)點(diǎn)介紹:
事務(wù)是并發(fā)控制的基本單位。
(相關(guān)教程推薦:mysql教程)
并發(fā)操作帶來(lái)的數(shù)據(jù)不一致性
1、丟失修改(Lost Update)
2、不可重復(fù)讀(Non-repeatable Read)
3、幻讀(Phantom Read)
4、讀“臟”數(shù)據(jù)(Dirty Read)
下面我們來(lái)分別看一下:
丟失修改:兩個(gè)事務(wù)T-1和T-2讀入同一數(shù)據(jù)并修改,T-2的提交結(jié)果破壞了T-1提交 的結(jié)果,導(dǎo)致T-1的修改被丟失。(修改-修改沖突)
不可重復(fù)讀:事務(wù)1讀取某一數(shù)據(jù),事務(wù)2對(duì)其做了修改;當(dāng)事務(wù)1再次讀該數(shù)據(jù) 時(shí),得到與前一次不同的值(讀-更新沖突)
幻讀:事務(wù)T-1按一定條件從數(shù)據(jù)庫(kù)中讀取了某些數(shù)據(jù)記錄,事務(wù)T-2刪除(插入) 了其中部分記錄 ,當(dāng)T-1再次按相同條件讀取數(shù)據(jù)時(shí),發(fā)現(xiàn)某些記錄神秘地 消失(出現(xiàn))了。(讀-插入/刪除沖突)
臟數(shù)據(jù):?事務(wù)T-1修改某一數(shù)據(jù),并將其寫(xiě)回磁盤;事務(wù)T-2讀取同一數(shù)據(jù)后,T-1由 于某種原因被撤銷這時(shí)T-1,已修改過(guò)的數(shù)據(jù)恢復(fù)原值,T-2讀到的數(shù)據(jù)就 與數(shù)據(jù)庫(kù)中的數(shù)據(jù)不一致T-2讀到的數(shù)據(jù)就為“臟”數(shù)據(jù),即不正確的數(shù)據(jù)(修 改-讀沖突)
數(shù)據(jù)不一致性:由于并發(fā)操作破壞了事務(wù)的隔離性
并發(fā)控制的目的
要用正確的方式調(diào)度并發(fā)操作,使一個(gè)用戶事務(wù)的執(zhí)行不受其他事務(wù)的干擾,從而避免造成數(shù)據(jù)的不一致性。