MySQL隔離機制

1.?臟寫购桑、臟讀、不可重復(fù)讀氏淑、幻讀等問題

1)臟寫


2)臟讀


無論是臟寫還是臟讀勃蜘,都是一個事務(wù)去更新或查詢了另一個事務(wù)未提交的數(shù)據(jù),如果另一個事務(wù)回滾假残,

就出現(xiàn)了臟寫缭贡、臟讀的情況

3)不可重復(fù)讀


不可重復(fù)讀不是什么大問題,具體取決于是否允許不可重復(fù)讀辉懒,如果業(yè)務(wù)要求事務(wù)期間每次讀取的

數(shù)據(jù)都是一致的阳惹,這就是問題,需要解決

4)幻讀


2.?MySQL隔離機制

1)read uncommitted

不允許臟寫(不允許兩個未提交的事務(wù)同時更新一條數(shù)據(jù))眶俩,但是會出現(xiàn)臟讀莹汤、不可重復(fù)讀、幻讀問題

2)read committed

不會出現(xiàn)臟寫和臟讀(查詢不到別的事務(wù)未提交的數(shù)據(jù))颠印,但是會出現(xiàn)不可重復(fù)讀纲岭、幻讀

3)repeatable read

不會出現(xiàn)臟寫、臟讀线罕、不可重復(fù)讀問題(事務(wù)一旦開啟止潮,別的事務(wù)提交后的值也不會讀到),但是會出現(xiàn)幻讀钞楼,

這里是mysql比較牛的地方喇闸,RR級別下可以解決幻讀的問題,要借助于下面所講的MVCC

4)serializable ?

串行化執(zhí)行询件,根本就不是并發(fā)燃乍,所以上述問題都不會出現(xiàn)


3.?MVCC

講MVCC之前,我們有必要聊下undo log版本鏈雳殊。

簡單來說,我們每條數(shù)據(jù)都有兩個隱藏的字段trx_id和roll_pointer窗轩,trx_id是最近一次更新數(shù)據(jù)的事務(wù)id夯秃, roll_pointer指向了你更新這個事務(wù)之前生成的undo log


再來看看基于undo log鏈的ReadView機制

簡單說就是執(zhí)行一個事務(wù)的時候,就會生成一個ReadView,里面有4個關(guān)鍵東西

1)m_ids --此時有哪些事務(wù)未提交

2)min_trx_id --m_ids里最小的值

3)max_trx_id --表示下一個事務(wù)生成時分配給它的id

4)creator_trx_id --當(dāng)前事務(wù)id



4.?鎖


1)獨占鎖(X鎖)

臟寫是絕對不允許的仓洼,是靠鎖來實現(xiàn)的介陶,讓多個事務(wù)更新同一行數(shù)據(jù)串行化,避免同時更新

事務(wù)A要更新數(shù)據(jù)色建,一看該數(shù)據(jù)沒有人鎖定哺呜,立馬創(chuàng)建一個鎖,包含了自己的trx_id和等待狀態(tài)箕戳,然后鎖和數(shù)據(jù)

關(guān)聯(lián)起來某残;此時事務(wù)B也想要更新數(shù)據(jù),發(fā)現(xiàn)數(shù)據(jù)已經(jīng)被加鎖了陵吸,然后B也生成一個鎖玻墅,但此時B是等待狀態(tài)的


接著事務(wù)A更新完數(shù)據(jù)提交,會把鎖釋放掉壮虫。一旦鎖釋放澳厢,就會去找還有沒有別的事務(wù)加鎖了,找到B的鎖把等

待狀態(tài)改為false,然后喚醒事務(wù)B繼續(xù)執(zhí)行囚似,此時事務(wù)B就獲取到數(shù)據(jù)了

如果此時別的事務(wù)來讀取這條數(shù)據(jù)會加鎖嘛剩拢?不會,基于MVCC饶唤,避免了頻繁加鎖

2)共享鎖(S鎖)

select * from table lock in share mode會給當(dāng)前數(shù)據(jù)加共享鎖

此時明白了徐伐,獨占鎖和獨占鎖是互斥的,別的事務(wù)不可以更新操作搬素;如果是查詢呵晨,默認(rèn)走MVCC不加鎖,如果手

動加共享鎖熬尺,也是互斥的摸屠;最后共享鎖和共享鎖是不互斥的

3)行鎖(上述兩種鎖講的就是行鎖)

4)表鎖(一般不會這樣操作)

lock table *** read --表級共享鎖

lock table *** write --表級獨占鎖

查詢、更新行數(shù)據(jù)的時候會在表上加意向鎖粱哼;分為意向共享鎖和意向獨占鎖


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末季二,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子揭措,更是在濱河造成了極大的恐慌胯舷,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绊含,死亡現(xiàn)場離奇詭異桑嘶,居然都是意外死亡,警方通過查閱死者的電腦和手機躬充,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門逃顶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讨便,“玉大人,你說我怎么就攤上這事以政“园” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵盈蛮,是天一觀的道長废菱。 經(jīng)常有香客問我,道長抖誉,這世上最難降的妖魔是什么殊轴? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮寸五,結(jié)果婚禮上梳凛,老公的妹妹穿的比我還像新娘。我一直安慰自己梳杏,他們只是感情好韧拒,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著十性,像睡著了一般叛溢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上劲适,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天楷掉,我揣著相機與錄音,去河邊找鬼霞势。 笑死烹植,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的愕贡。 我是一名探鬼主播草雕,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼固以!你這毒婦竟也來了墩虹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤憨琳,失蹤者是張志新(化名)和其女友劉穎诫钓,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篙螟,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡菌湃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了遍略。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惧所。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡场梆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纯路,到底是詐尸還是另有隱情,我是刑警寧澤寞忿,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布驰唬,位于F島的核電站,受9級特大地震影響腔彰,放射性物質(zhì)發(fā)生泄漏叫编。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一霹抛、第九天 我趴在偏房一處隱蔽的房頂上張望搓逾。 院中可真熱鬧,春花似錦杯拐、人聲如沸霞篡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朗兵。三九已至,卻和暖如春顶滩,著一層夾襖步出監(jiān)牢的瞬間余掖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工礁鲁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盐欺,地道東北人。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓仅醇,卻偏偏與公主長得像冗美,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子着憨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349

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