數(shù)據(jù)庫的隔離等級總結(jié)(重點區(qū)分sql標(biāo)準(zhǔn)中的不可重復(fù)讀和幻讀)

《高性能mysql》這本書中叁幢,在解釋sql標(biāo)準(zhǔn)的隔離等級的時候曼玩,有一些含混窒百,造成理解不清黍判。主要的原因在于理解顷帖,幻讀渤滞,臟讀和不可重復(fù)讀的區(qū)別。在書中妄呕,幻讀,臟讀和不可重復(fù)讀是如下解釋的

  • 臟讀(Dirty Read):事務(wù)可以讀取未提交的數(shù)據(jù)肿孵,被稱為臟讀唠粥。

  • 不可重復(fù)讀(nonrepeatable read):兩次執(zhí)行相同的查詢晤愧,可能會得到不一樣的結(jié)果蛉腌。

  • 幻讀(Phantom Read):當(dāng)某個事物在讀取某個范圍的的記錄的時候,另一個事務(wù)又在該范圍內(nèi)插入新的記錄烙丛,當(dāng)之前的事務(wù)再次讀取該范圍的記錄的時候,會產(chǎn)生幻行(Phantom Row)。

    我最開始的時候很迷惑介评,我在想幻讀和不可重復(fù)讀不是一個概念嗎,都是連續(xù)兩次讀取得到的結(jié)果不一樣寒瓦。

    事實上不可重復(fù)讀是包含幻讀的概念的。

    幻讀是你的查詢語句是試圖獲取一個范圍內(nèi)的數(shù)據(jù)杂腰,注意是一個范圍的數(shù)據(jù)椅文,加入第一次的時候試圖獲取的范圍包含a,b,c,第二次讀取的時候其它事務(wù)添加了數(shù)據(jù)d皆刺,而d也滿足你的查詢范圍,所以第二次查詢的時候漓帅,會試圖去獲取a,b,c,d。這種情況就叫做幻讀忙干。

    而不可重復(fù)讀在幻讀的基礎(chǔ)上浪藻,還包含一種情況,就是當(dāng)你讀取指定行的數(shù)據(jù)爱葵,兩次讀取可能會不一樣末融。舉例說明:假如第一次你試圖獲取a,b,c勾习,第二次依舊試圖獲取a,b,c。但是在第二次試圖獲取a,b,c的時候巧婶,可能會發(fā)生兩種情況涂乌,第一個是b沒有,被其它事務(wù)刪除了湾盒,第二是c的內(nèi)容被改變。

    以上就是幻讀和不可重復(fù)讀的區(qū)別毅人。

下面貼上sql標(biāo)準(zhǔn)對四種隔離等級的定義

  • Read Uncommited (未提交讀):事務(wù)中的修改尖殃,即使沒有提交,對其它事務(wù)也都是可見的送丰,事務(wù)可以讀取未提交的數(shù)據(jù)。

  • Read Committed(提交讀):一個事務(wù)在提交之前俐载,所做的任何修改對其它事務(wù)都是不可見的登失。但是當(dāng)其它事務(wù)修改數(shù)據(jù)的時候,可能會造成兩次讀取的結(jié)果不一樣壁畸。故提交讀存在不可重復(fù)讀的現(xiàn)狀。

  • Repeatable Read(可重復(fù)讀):該級別保證統(tǒng)一事務(wù)讀取同樣記錄的結(jié)果一致太抓。但是當(dāng)出現(xiàn)讀取一定范圍的記錄的時候令杈,會因為其它事務(wù)在該事務(wù)提交之前插入數(shù)據(jù),導(dǎo)致讀取新插入的數(shù)據(jù)逗噩。產(chǎn)生幻讀跌榔。

  • Serializable (可串行化):強制事務(wù)串行的執(zhí)行僧须,并發(fā)性能最低,但是避免了上述的問題担平。

    額外說明:很多博客提出說repeatble read解決了幻讀的問題锭部,這是錯誤,實際上應(yīng)該說mysql的InnoDB和部分引擎通過使用MVCC (Multiversion Concurrency Control 多版本并發(fā)控制)技術(shù)取胎,實現(xiàn)了在提交讀級別的解決幻讀問題的方案湃窍。當(dāng)然這個辦法犧牲的是空間。

參考:

《高性能mysql》第三版坝咐,電子工業(yè)出版社墨坚,Baron Schwartz等著
你若盛開的博客-標(biāo)準(zhǔn)SQL規(guī)范中定義的四個事務(wù)隔離級別

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末映挂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子柑船,更是在濱河造成了極大的恐慌,老刑警劉巖亏拉,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逆巍,死亡現(xiàn)場離奇詭異,居然都是意外死亡笙僚,警方通過查閱死者的電腦和手機灵再,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門亿笤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來净薛,“玉大人,你說我怎么就攤上這事罕拂∪桑” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵柿菩,是天一觀的道長雨涛。 經(jīng)常有香客問我,道長替久,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任后众,我火速辦了婚禮颅拦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘距帅。我一直安慰自己,他們只是感情好绍移,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布讥电。 她就那樣靜靜地躺著,像睡著了一般恼策。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涣楷,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音绽乔,去河邊找鬼。 笑死折砸,一個胖子當(dāng)著我的面吹牛沙峻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播摔寨,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼删顶!你這毒婦竟也來了淑廊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤季惩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后关摇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荒叶,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡些楣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年愁茁,在試婚紗的時候發(fā)現(xiàn)自己被綠了蚕钦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘶居。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖整袁,靈堂內(nèi)的尸體忽然破棺而出佑吝,到底是詐尸還是另有隱情坐昙,我是刑警寧澤炸客,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布戈钢,位于F島的核電站,受9級特大地震影響蝶溶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抖所,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一痕囱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鞍恢,春花似錦、人聲如沸弦悉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涩搓。三九已至,卻和暖如春昧甘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背庸推。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刮吧,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓杀捻,卻偏偏與公主長得像蚓庭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子器赞,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

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