悲觀鎖樂(lè)觀鎖定義 關(guān)于mySql中樂(lè)觀鎖與讀已提交(事務(wù)隔離級(jí)別)的搭配使用問(wèn)題!求大神帶飛?
關(guān)于mySql中樂(lè)觀鎖與讀已提交(事務(wù)隔離級(jí)別)的搭配使用問(wèn)題!求大神帶飛?在read uncommitted級(jí)別,事務(wù)中的更改(即使未提交)對(duì)其他事務(wù)也是可見(jiàn)的。事務(wù)可以讀取未提交的數(shù)據(jù),這也可以稱
關(guān)于mySql中樂(lè)觀鎖與讀已提交(事務(wù)隔離級(jí)別)的搭配使用問(wèn)題!求大神帶飛?
在read uncommitted級(jí)別,事務(wù)中的更改(即使未提交)對(duì)其他事務(wù)也是可見(jiàn)的。事務(wù)可以讀取未提交的數(shù)據(jù),這也可以稱為臟讀。這個(gè)水平實(shí)際上會(huì)導(dǎo)致很多問(wèn)題。就性能而言,uncommitted read并不比其他級(jí)別好多少,但它缺乏其他級(jí)別的優(yōu)點(diǎn),除非它確實(shí)是必要的,而且通常不會(huì)在實(shí)踐中使用。
MySQL有一個(gè)多版本控制mvcc,可以看作是行級(jí)鎖的一個(gè)變種,但是在很多情況下避免了鎖,所以成本更低。Mvcc實(shí)際上是樂(lè)觀并發(fā)控制,它是通過(guò)在每行記錄后面保存兩個(gè)隱藏列來(lái)實(shí)現(xiàn)的。一個(gè)是創(chuàng)建時(shí)間,另一個(gè)是刪除時(shí)間。當(dāng)然,實(shí)際存儲(chǔ)不是時(shí)間值,而是版本號(hào)。
Mvcc僅在可重復(fù)讀取和讀取提交級(jí)別工作,其他隔離級(jí)別與Mvcc不兼容,因?yàn)樽x取未提交總是讀取最新數(shù)據(jù),而不是與當(dāng)前事務(wù)版本匹配的數(shù)據(jù)行。
綜上所述,樂(lè)觀鎖可以與read submitted結(jié)合使用
mvcc現(xiàn)在已經(jīng)在主流數(shù)據(jù)庫(kù)中使用。使用RR隔離級(jí)別后,將不會(huì)出現(xiàn)虛讀。
根據(jù)不同的材料,RR是199X的ANSI SQL標(biāo)準(zhǔn),但真正的數(shù)據(jù)庫(kù)不一定符合標(biāo)準(zhǔn)(事實(shí)上,最好沒(méi)有虛讀)。