不可重復讀和幻讀的區(qū)別

當然, 從總的結(jié)果來看, 似乎兩者都表現(xiàn)為兩次讀取的結(jié)果不一致.

但如果你從控制的角度來看, 兩者的區(qū)別就比較大
對于前者, 只需要鎖住滿足條件的記錄
對于后者, 要鎖住滿足條件及其相近的記錄


我這么理解是否可以?
避免不可重復讀需要鎖行就行
避免幻影讀則需要鎖表


不可重復讀和幻讀的區(qū)別####

很多人容易搞混不可重復讀和幻讀此改,確實這兩者有些相似。但不可重復讀重點在于update和delete,而幻讀的重點在于insert靶庙。

如果使用鎖機制來實現(xiàn)這兩種隔離級別陷嘴,在可重復讀中,該sql第一次讀取到數(shù)據(jù)后旦棉,就將這些數(shù)據(jù)加鎖疲眷,其它事務(wù)無法修改這些數(shù)據(jù)禾蚕,就可以實現(xiàn)可重復 讀了。但這種方法卻無法鎖住insert的數(shù)據(jù)狂丝,所以當事務(wù)A先前讀取了數(shù)據(jù)换淆,或者修改了全部數(shù)據(jù),事務(wù)B還是可以insert數(shù)據(jù)提交美侦,這時事務(wù)A就會 發(fā)現(xiàn)莫名其妙多了一條之前沒有的數(shù)據(jù)产舞,這就是幻讀,不能通過行鎖來避免菠剩。需要Serializable隔離級別 易猫,讀用讀鎖,寫用寫鎖具壮,讀鎖和寫鎖互斥准颓,這么做可以有效的避免幻讀、不可重復讀棺妓、臟讀等問題攘已,但會極大的降低數(shù)據(jù)庫的并發(fā)能力。

所以說不可重復讀和幻讀最大的區(qū)別怜跑,就在于如何通過鎖機制來解決他們產(chǎn)生的問題样勃。

上文說的,是使用悲觀鎖機制來處理這兩種問題性芬,但是MySQL峡眶、ORACLE、PostgreSQL等成熟的數(shù)據(jù)庫植锉,出于性能考慮辫樱,都是使用了以樂觀鎖為理論基礎(chǔ)的MVCC(多版本并發(fā)控制)來避免這兩種問題。

悲觀鎖和樂觀鎖####

悲觀鎖
正如其名俊庇,它指的是對數(shù)據(jù)被外界(包括本系統(tǒng)當前的其他事務(wù)狮暑,以及來自外部系統(tǒng)的事務(wù)處理)修改持保守態(tài)度,因此辉饱,在整個數(shù)據(jù)處理過程中搬男,將數(shù)據(jù)處 于鎖定狀態(tài)。悲觀鎖的實現(xiàn)彭沼,往往依靠數(shù)據(jù)庫提供的鎖機制(也只有數(shù)據(jù)庫層提供的鎖機制才能真正保證數(shù)據(jù)訪問的排他性止后,否則,即使在本系統(tǒng)中實現(xiàn)了加鎖機 制溜腐,也無法保證外部系統(tǒng)不會修改數(shù)據(jù))译株。

在悲觀鎖的情況下,為了保證事務(wù)的隔離性挺益,就需要一致性鎖定讀歉糜。讀取數(shù)據(jù)時給加鎖,其它事務(wù)無法修改這些數(shù)據(jù)望众。修改刪除數(shù)據(jù)時也要加鎖匪补,其它事務(wù)無法讀取這些數(shù)據(jù)。

樂觀鎖
相對悲觀鎖而言烂翰,樂觀鎖機制采取了更加寬松的加鎖機制夯缺。悲觀鎖大多數(shù)情況下依靠數(shù)據(jù)庫的鎖機制實現(xiàn),以保證操作最大程度的獨占性甘耿。但隨之而來的就是數(shù)據(jù)庫性能的大量開銷踊兜,特別是對長事務(wù)而言,這樣的開銷往往無法承受佳恬。

而樂觀鎖機制在一定程度上解決了這個問題捏境。樂觀鎖,大多是基于數(shù)據(jù)版本( Version )記錄機制實現(xiàn)毁葱。何謂數(shù)據(jù)版本垫言?即為數(shù)據(jù)增加一個版本標識,在基于數(shù)據(jù)庫表的版本解決方案中倾剿,一般是通過為數(shù)據(jù)庫表增加一個 “version” 字段來實現(xiàn)筷频。讀取出數(shù)據(jù)時,將此版本號一同讀出前痘,之后更新時凛捏,對此版本號加一。此時际度,將提交數(shù)據(jù)的版本數(shù)據(jù)與數(shù)據(jù)庫表對應記錄的當前版本信息進行比對葵袭,如 果提交的數(shù)據(jù)版本號大于數(shù)據(jù)庫表當前版本號,則予以更新乖菱,否則認為是過期數(shù)據(jù)坡锡。

要說明的是,MVCC的實現(xiàn)沒有固定的規(guī)范窒所,每個數(shù)據(jù)庫都會有不同的實現(xiàn)方式鹉勒,這里討論的是InnoDB的MVCC。

轉(zhuǎn)自:https://www.cnblogs.com/itcomputer/articles/5133254.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吵取,一起剝皮案震驚了整個濱河市禽额,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖脯倒,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件实辑,死亡現(xiàn)場離奇詭異,居然都是意外死亡藻丢,警方通過查閱死者的電腦和手機剪撬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悠反,“玉大人残黑,你說我怎么就攤上這事≌瘢” “怎么了梨水?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長茵臭。 經(jīng)常有香客問我疫诽,道長,這世上最難降的妖魔是什么笼恰? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任踊沸,我火速辦了婚禮,結(jié)果婚禮上社证,老公的妹妹穿的比我還像新娘逼龟。我一直安慰自己,他們只是感情好追葡,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布腺律。 她就那樣靜靜地躺著,像睡著了一般宜肉。 火紅的嫁衣襯著肌膚如雪匀钧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天谬返,我揣著相機與錄音之斯,去河邊找鬼。 笑死遣铝,一個胖子當著我的面吹牛佑刷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酿炸,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼瘫絮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了填硕?” 一聲冷哼從身側(cè)響起麦萤,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后壮莹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翅帜,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年垛孔,在試婚紗的時候發(fā)現(xiàn)自己被綠了藕甩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡周荐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出僵娃,到底是詐尸還是另有隱情概作,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布默怨,位于F島的核電站讯榕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏匙睹。R本人自食惡果不足惜愚屁,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望痕檬。 院中可真熱鬧霎槐,春花似錦、人聲如沸梦谜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唁桩。三九已至闭树,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間荒澡,已是汗流浹背报辱。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留单山,地道東北人碍现。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像饥侵,于是被迫代替她去往敵國和親鸵赫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容