數(shù)據(jù)庫的事務(wù)隔離級別其實是“可用性”和“數(shù)據(jù)一致性”的一場博弈——隔離級別的程度越高珊燎,數(shù)據(jù)一致性做的越好危彩,但可用性在降低茶鉴。
這里的“數(shù)據(jù)一致性”是指:在一個事務(wù)中,同一條sql查詢語句戈鲁,多次讀取仇参,所得數(shù)據(jù)沒有變化(
沒有受到其他事務(wù)的干擾
)。
下面我們用圖示的方式來描述不同的事務(wù)隔離級別可能出現(xiàn)的“數(shù)據(jù)一致性”問題:
我們用一條水平線來代表時間軸婆殿,用兩個長矩形來分別代表兩個事務(wù)诈乒,其中矩形在時間軸上重疊的部分則代表其并行特征(當(dāng)然,在實際使用中未必只有并行的兩個事務(wù)婆芦,但兩個事務(wù)足以說明問題)怕磨。
兩個只讀事務(wù),不存在數(shù)據(jù)不一致的問題消约,不存在探討價值肠鲫;同樣,兩個只寫事務(wù)或粮,不存在對數(shù)據(jù)的使用過程导饲,也不存在數(shù)據(jù)不一致的問題。
臟讀與不可重復(fù)讀
如上圖氯材,事務(wù)一將‘張三’的總額在原來的基礎(chǔ)上增加10渣锦,事務(wù)二在事務(wù)一提交前后分別查詢了一次‘張三’的總額;那下面用圖示的方式解釋會出現(xiàn)什么問題氢哮。
幻讀
如上圖袋毙,事務(wù)二中是不可能出現(xiàn)update和delete操作的,因為不可重復(fù)讀的隔離級別會對事務(wù)一第一次讀取到的數(shù)據(jù)加行鎖冗尤,所有事務(wù)一時間范圍內(nèi)事務(wù)二的update和delete操作會處于鎖等待狀態(tài)听盖,直到事務(wù)一執(zhí)行完畢(當(dāng)然喉镰,有可能因鎖超時而被數(shù)據(jù)庫放棄執(zhí)行)糊肠。
如上圖鹃操,事務(wù)一的兩次讀取結(jié)果也不同颜说,實時上也是一種“不可重復(fù)讀”,但與上文中提到的不可重復(fù)讀有區(qū)別的地方在于--兩次讀取到的數(shù)據(jù)集合不再是同樣的數(shù)據(jù)行記錄悬蔽;所以扯躺,習(xí)慣上稱這種現(xiàn)象叫--幻讀。