MySQL事務的隔離性

什么是事務的隔離級別

事務的隔離級別秩贰,老生常談的問題了赔蒲,指多個事務并發(fā)執(zhí)行的時候相互之間不受到彼此的干擾矮燎,根據(jù)隔離程度對隔離性有會分類毡证。在具體介紹事務隔離性前有必要介紹幾個名詞說明數(shù)據(jù)庫并發(fā)操作存在的問題。

臟讀

事務可以讀取未提交的數(shù)據(jù)恢筝,就被稱為臟讀哀卫。 -------《高性能MySQL》

從定義來看,這個很好理解撬槽,舉個例子來說:假如有兩個事務AB同時更新一個數(shù)據(jù)c=1此改,事務A執(zhí)行select語句獲取到c=1,然后事務A將數(shù)據(jù)更改為c=2但是沒有提交事務侄柔。這時候事務B執(zhí)行select發(fā)現(xiàn)此時的數(shù)據(jù)為c=2共啃,這樣就產生了臟讀。

不可重復讀

事務在提交前可以看到其他事務已經(jīng)提交的數(shù)據(jù)暂题,導致兩次讀取出現(xiàn)不一樣的結果移剪,我們稱之為不可重復讀

同樣舉例來說明這種數(shù)據(jù)出現(xiàn)的情況:兩個事務AB,事務A執(zhí)行select操作查詢出數(shù)據(jù)d=1薪者,此時事務B將此數(shù)據(jù)更改為d=2并提交了事務纵苛,此時事務A再執(zhí)行select操作時,發(fā)現(xiàn)數(shù)據(jù)d=2和上一次查詢的結果不一樣啸胧,這就導致了數(shù)據(jù)的不可重復讀赶站。

幻讀

所謂幻讀幔虏,是指當某個事務在讀取某個范圍內的記錄時纺念,另外一個事務又在改范圍內插入了新的記錄,當之前的事務再次讀取該范圍的記錄時想括,會產生幻行陷谱。 --《高性能MySQL》

上面的定義是我們理解中的定義,大部分人都是這么理解幻讀,然而幻讀真的是如此的嗎烟逊?后面介紹隔離性的時候我們會在實際操作中驗證這點渣窜。

事務的隔離級別

Read Uncommited

未提交讀隔離級別,就是指一個事務中可以讀取其他事務未提交的數(shù)據(jù)宪躯,這個級別會導致臟讀乔宿。下面在我本機安裝的mysql中驗證這一點;

mysql的默認隔離級別是Repeatable Read访雪,如下圖所示:

image.png

下面我們把隔離級別改為Read Uncommited:
image.png

image.png

下面驗證此隔離級別下會出現(xiàn)的臟讀情況详瑞,打開兩個終端
終端一:開啟事務,查詢test表中的數(shù)據(jù)臣缀,結果如下
image.png

終端二:開啟事務坝橡,往test表中插入數(shù)據(jù),但是不提交事務精置,結果如下

image.png

終端一:終端二插入數(shù)據(jù)以后往在終端一中執(zhí)行同樣的查詢語句计寇,結果如下


image.png

然后將終端二中的事務回滾,此時在終端一中的事務中查詢數(shù)據(jù)脂倦,發(fā)現(xiàn)剛才插入的數(shù)據(jù)又消失了
終端二:


image.png

終端一:


image.png

從上圖發(fā)現(xiàn)番宁,在終端二中的事務沒有提交的情況下,終端一中的事務就能夠讀取到插入的數(shù)據(jù)赖阻,所以在 read-uncommitted隔離條件下就會產生臟讀的情況贝淤。這個隔離級別是最低的隔離級別,上面所說的臟讀政供、不可重復讀和幻讀等情況都會出現(xiàn)播聪,所以一般來說不使用此隔離級別。

Read Committed

提交讀隔離級別布隔,一個事務開始時离陶,只能讀取到已經(jīng)提交的事務所做的修改。這個隔離級別會出現(xiàn)不可重復讀的情況
修改數(shù)據(jù)庫的事務隔離級別為Read Committed:

image.png

終端一:


image.png

終端二:

image.png

終端一:
image.png

從上面兩個終端的截圖發(fā)現(xiàn)衅檀,終端二中的事務在沒有提交事務的情況下招刨,修改的數(shù)據(jù)在終端一中是查詢不到的,提交事務哀军,再查看結果
終端二:
image.png

終端一:
image.png

從上面結果看出沉眶,終端二中的事務提交以后,在終端一中可以查詢出結果杉适。
該隔離級別下面會出現(xiàn)不可重復讀和幻讀的情況谎倔,但是不會出現(xiàn)臟讀的情況,oracle的默認隔離級別就是提交讀的隔離級別猿推。

Repeatable Read

可重復讀隔離級別片习,保證同一個事務在多次讀取同樣的結果中是一致的捌肴。
修改隔離級別


image.png

我們按照《高性能MySQL》上的說法做一個實驗,看看是否會出現(xiàn)幻讀的情況:
終端一:


image.png

終端二:
image.png

image.png

終端一:


image.png

從上面來看藕咏,并沒有出現(xiàn)幻讀的情況状知,終端一中的數(shù)據(jù)集并沒有發(fā)生改變。其實幻讀不能理解成讀-讀的過程孽查,而是應該理解為讀-寫的過程饥悴,事務在插入事先檢測不存在的記錄時,驚奇的發(fā)現(xiàn)這些數(shù)據(jù)已經(jīng)存在了盲再,之前監(jiān)測到的數(shù)據(jù)中多了一行铺坞,像產生幻覺一樣。怎么理解上面那句話呢洲胖,下面這個例子就能很好的解釋這一點:
事務一:
執(zhí)行sql:
select * from test where id = 3;
執(zhí)行結果為null济榨,證明沒有主鍵 id=3的這行數(shù)據(jù)
事務二:
執(zhí)行sql:
insert into test(id,num,date) values(3,3,now());
然后提交事務二
事務一:
執(zhí)行sql:
insert into test(id,num,date) values(3,3,now());
執(zhí)行此 sql時發(fā)現(xiàn)報錯,顯示已經(jīng)有id=3數(shù)據(jù)绿映,就像產生幻覺擒滑,明明是沒有數(shù)據(jù),為什么突然出現(xiàn)這行數(shù)據(jù)呢2嫦摇Xひ弧!

Serializable

可串行化隔離級別淹冰,強制事務串行執(zhí)行库车,這種隔離級別在實際使用中很少用,所以不做過多的介紹樱拴。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末柠衍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子晶乔,更是在濱河造成了極大的恐慌珍坊,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件正罢,死亡現(xiàn)場離奇詭異阵漏,居然都是意外死亡,警方通過查閱死者的電腦和手機翻具,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門履怯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人裆泳,你說我怎么就攤上這事叹洲。” “怎么了晾虑?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵疹味,是天一觀的道長。 經(jīng)常有香客問我帜篇,道長糙捺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任笙隙,我火速辦了婚禮洪灯,結果婚禮上,老公的妹妹穿的比我還像新娘竟痰。我一直安慰自己签钩,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布坏快。 她就那樣靜靜地躺著铅檩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪莽鸿。 梳的紋絲不亂的頭發(fā)上昧旨,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死泻红,一個胖子當著我的面吹牛客扎,可吹牛的內容都是我干的。 我是一名探鬼主播盖高,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了怕吴?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤县踢,失蹤者是張志新(化名)和其女友劉穎械哟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體殿雪,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡暇咆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了丙曙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爸业。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖亏镰,靈堂內的尸體忽然破棺而出扯旷,到底是詐尸還是另有隱情,我是刑警寧澤索抓,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布钧忽,位于F島的核電站毯炮,受9級特大地震影響,放射性物質發(fā)生泄漏耸黑。R本人自食惡果不足惜桃煎,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望大刊。 院中可真熱鬧为迈,春花似錦、人聲如沸缺菌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伴郁。三九已至耿战,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間焊傅,已是汗流浹背昆箕。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留租冠,地道東北人鹏倘。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像顽爹,于是被迫代替她去往敵國和親纤泵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容