事務(wù)及事務(wù)隔離級(jí)別

事務(wù)及事務(wù)隔離級(jí)別

什么是事務(wù)

事務(wù)是訪問(wèn)數(shù)據(jù)庫(kù)的一個(gè)操作序列,數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)通過(guò)事務(wù)集來(lái)完成對(duì)數(shù)據(jù)庫(kù)的存取帐我。事務(wù)的正確執(zhí)行使得數(shù)據(jù)庫(kù)從一種狀態(tài)轉(zhuǎn)換為另一種狀態(tài)

事務(wù)必須服從ISO/IEC所制定的ACID原則阎毅。ACID是原子性(atomicity)焚刚、一致性(consistency)、隔離性(isolation)扇调、持久性(durability)的縮寫矿咕,這四種狀態(tài)的意思是:

1、原子性

即不可分割狼钮,事務(wù)要么全部被執(zhí)行碳柱,要么全部不執(zhí)行。如果事務(wù)的所有子事務(wù)全部提交成功熬芜,則所有的數(shù)據(jù)庫(kù)操作被提交莲镣,數(shù)據(jù)庫(kù)狀態(tài)發(fā)生變化;如果有子事務(wù)失敗涎拉,則其他子事務(wù)的數(shù)據(jù)庫(kù)操作被回滾瑞侮,即數(shù)據(jù)庫(kù)回到事務(wù)執(zhí)行前的狀態(tài),不會(huì)發(fā)生狀態(tài)轉(zhuǎn)換

2鼓拧、一致性

事務(wù)的執(zhí)行使得數(shù)據(jù)庫(kù)從一種正確狀態(tài)轉(zhuǎn)換成另外一種正確狀態(tài)

3半火、隔離性

在事務(wù)正確提交之前,不允許把事務(wù)對(duì)該數(shù)據(jù)的改變提供給任何其他事務(wù)季俩,即在事務(wù)正確提交之前钮糖,它可能的結(jié)果不應(yīng)該顯示給其他事務(wù)

4、持久性

事務(wù)正確提交之后酌住,其結(jié)果將永遠(yuǎn)保存在數(shù)據(jù)庫(kù)之中店归,即使在事務(wù)提交之后有了其他故障,事務(wù)的處理結(jié)果也會(huì)得到保存

事務(wù)的作用

事務(wù)管理對(duì)于企業(yè)級(jí)應(yīng)用而言至關(guān)重要酪我,它保證了用戶的每一次操作都是可靠的消痛,即便出現(xiàn)了異常的訪問(wèn)情況,也不至于破壞后臺(tái)數(shù)據(jù)的完整性都哭。就像銀行的自動(dòng)提款機(jī)ATM肄满,通常ATM都可以正常為客戶服務(wù)谴古,但是也難免遇到操作過(guò)程中及其突然出故障的情況,此時(shí)稠歉,事務(wù)就必須確保出故障前對(duì)賬戶的操作不生效,就像用戶剛才完全沒(méi)有使用過(guò)ATM機(jī)一樣汇陆,以保證用戶和銀行的利益都不受損失怒炸。

并發(fā)下事務(wù)會(huì)產(chǎn)生的問(wèn)題

舉個(gè)例子,事務(wù)A和事務(wù)B操縱的是同一個(gè)資源毡代,事務(wù)A有若干個(gè)子事務(wù)阅羹,事務(wù)B也有若干個(gè)子事務(wù),事務(wù)A和事務(wù)B在高并發(fā)的情況下教寂,會(huì)出現(xiàn)各種各樣的問(wèn)題捏鱼。"各種各樣的問(wèn)題",總結(jié)一下主要就是五種:第一類丟失更新酪耕、第二類丟失更新导梆、臟讀、不可重復(fù)讀迂烁、幻讀看尼。五種之中,第一類丟失更新盟步、第二類丟失更新不重要藏斩,不講了,講一下臟讀却盘、不可重復(fù)讀和幻讀狰域。

1、臟讀

所謂臟讀黄橘,就是指事務(wù)A讀到了事務(wù)B還沒(méi)有提交的數(shù)據(jù)兆览,比如銀行取錢,事務(wù)A開啟事務(wù)旬陡,此時(shí)切換到事務(wù)B拓颓,事務(wù)B開啟事務(wù)-->取走100元,此時(shí)切換回事務(wù)A描孟,事務(wù)A讀取的肯定是數(shù)據(jù)庫(kù)里面的原始數(shù)據(jù)驶睦,因?yàn)槭聞?wù)B取走了100塊錢,并沒(méi)有提交匿醒,數(shù)據(jù)庫(kù)里面的賬務(wù)余額肯定還是原始余額场航,這就是臟讀。

2廉羔、不可重復(fù)讀

所謂不可重復(fù)讀溉痢,就是指在一個(gè)事務(wù)里面讀取了兩次某個(gè)數(shù)據(jù),讀出來(lái)的數(shù)據(jù)不一致。還是以銀行取錢為例孩饼,事務(wù)A開啟事務(wù)-->查出銀行卡余額為1000元髓削,此時(shí)切換到事務(wù)B事務(wù)B開啟事務(wù)-->事務(wù)B取走100元-->提交,數(shù)據(jù)庫(kù)里面余額變?yōu)?00元镀娶,此時(shí)切換回事務(wù)A立膛,事務(wù)A再查一次查出賬戶余額為900元,這樣對(duì)事務(wù)A而言梯码,在同一個(gè)事務(wù)內(nèi)兩次讀取賬戶余額數(shù)據(jù)不一致宝泵,這就是不可重復(fù)讀。

3轩娶、幻讀

所謂幻讀儿奶,就是指在一個(gè)事務(wù)里面的操作中發(fā)現(xiàn)了未被操作的數(shù)據(jù)。比如學(xué)生信息鳄抒,事務(wù)A開啟事務(wù)-->修改所有學(xué)生當(dāng)天簽到狀況為false闯捎,此時(shí)切換到事務(wù)B,事務(wù)B開啟事務(wù)-->事務(wù)B插入了一條學(xué)生數(shù)據(jù)嘁酿,此時(shí)切換回事務(wù)A隙券,事務(wù)A提交的時(shí)候發(fā)現(xiàn)了一條自己沒(méi)有修改過(guò)的數(shù)據(jù),這就是幻讀闹司,就好像發(fā)生了幻覺(jué)一樣娱仔。幻讀出現(xiàn)的前提是并發(fā)的事務(wù)中有事務(wù)發(fā)生了插入游桩、刪除操作牲迫。

事務(wù)隔離級(jí)別

事務(wù)隔離級(jí)別,就是為了解決上面幾種問(wèn)題而誕生的借卧。為什么要有事務(wù)隔離級(jí)別盹憎,因?yàn)?strong>事務(wù)隔離級(jí)別越高,在并發(fā)下會(huì)產(chǎn)生的問(wèn)題就越少铐刘,但同時(shí)付出的性能消耗也將越大****陪每,因此很多時(shí)候必須在并發(fā)性和性能之間做一個(gè)權(quán)衡。所以設(shè)立了幾種事務(wù)隔離級(jí)別镰吵,以便讓不同的項(xiàng)目可以根據(jù)自己項(xiàng)目的并發(fā)情況選擇合適的事務(wù)隔離級(jí)別檩禾,對(duì)于在事務(wù)隔離級(jí)別之外會(huì)產(chǎn)生的并發(fā)問(wèn)題,在代碼中做補(bǔ)償疤祭。

事務(wù)隔離級(jí)別有4種盼产,但是像Spring會(huì)提供給用戶5種,來(lái)看一下:

1勺馆、DEFAULT

默認(rèn)隔離級(jí)別戏售,每種數(shù)據(jù)庫(kù)支持的事務(wù)隔離級(jí)別不一樣侨核,如果Spring配置事務(wù)時(shí)將isolation設(shè)置為這個(gè)值的話,那么將使用底層數(shù)據(jù)庫(kù)的默認(rèn)事務(wù)隔離級(jí)別灌灾。順便說(shuō)一句搓译,如果使用的MySQL,可以使用"select @tx_isolation"來(lái)查看默認(rèn)的事務(wù)隔離級(jí)別

2紧卒、READ_UNCOMMITTED

讀未提交侥衬,即能夠讀取到?jīng)]有被提交的數(shù)據(jù),所以很明顯這個(gè)級(jí)別的隔離機(jī)制無(wú)法解決臟讀跑芳、不可重復(fù)讀、幻讀中的任何一種直颅,因此很少使用

3博个、READ_COMMITED

讀已提交,即能夠讀到那些已經(jīng)提交的數(shù)據(jù)功偿,自然能夠防止臟讀盆佣,但是無(wú)法限制不可重復(fù)讀和幻讀

4、REPEATABLE_READ

重復(fù)讀取械荷,即在數(shù)據(jù)讀出來(lái)之后加鎖共耍,類似"select * from XXX for update",明確數(shù)據(jù)讀取出來(lái)就是為了更新用的吨瞎,所以要加一把鎖痹兜,防止別人修改它。REPEATABLE_READ的意思也類似颤诀,讀取了一條數(shù)據(jù)字旭,這個(gè)事務(wù)不結(jié)束,別的事務(wù)就不可以改這條記錄崖叫,這樣就解決了臟讀遗淳、不可重復(fù)讀的問(wèn)題,但是幻讀的問(wèn)題還是無(wú)法解決

5心傀、SERLALIZABLE

串行化屈暗,最高的事務(wù)隔離級(jí)別,不管多少事務(wù)脂男,挨個(gè)運(yùn)行完一個(gè)事務(wù)的所有子事務(wù)之后才可以執(zhí)行另外一個(gè)事務(wù)里面的所有子事務(wù)养叛,這樣就解決了臟讀、不可重復(fù)讀和幻讀的問(wèn)題了

網(wǎng)上專門有圖用表格的形式列出了事務(wù)隔離級(jí)別解決的并發(fā)問(wèn)題:

[站外圖片上傳中...(image-1b1a56-1542202038860)]

再必須強(qiáng)調(diào)一遍疆液,不是事務(wù)隔離級(jí)別設(shè)置得越高越好一铅,事務(wù)隔離級(jí)別設(shè)置得越高,意味著勢(shì)必要花手段去加鎖用以保證事務(wù)的正確性堕油,那么效率就要降低潘飘,因此實(shí)際開發(fā)中往往要在效率和并發(fā)正確性之間做一個(gè)取舍肮之,一般情況下會(huì)設(shè)置為READ_COMMITED,此時(shí)避免了臟讀卜录,并發(fā)性也還不錯(cuò)戈擒,之后再通過(guò)一些別的手段去解決不可重復(fù)讀和幻讀的問(wèn)題就好了。

事物隔離級(jí)別查看及修改

首先說(shuō)明一下MySQL查看和修改事務(wù)隔離級(jí)別的幾個(gè)命令:

  • 查看事務(wù)隔離級(jí)別使用select @@tx_isolation

  • 修改當(dāng)前會(huì)話事務(wù)隔離級(jí)別使用SET session TRANSACTION ISOLATION LEVEL Serializable;(參數(shù)可以為:Read uncommitted|Read committed|Repeatable read|Serializable)

  • 修改全局事務(wù)隔離級(jí)別使用SET global TRANSACTION ISOLATION LEVEL Serializable;(參數(shù)可以為:Read uncommitted|Read committed|Repeatable read|Serializable)

修改了會(huì)話的事務(wù)隔離級(jí)別艰毒,比如MyBatis筐高,getSqlSession()的時(shí)候,只針對(duì)這一次拿到的Session有效丑瞧;比如CMD命令行柑土,只對(duì)這一次的窗口有效。

修改了全局的事務(wù)隔離級(jí)別绊汹,那么針對(duì)此后所有的會(huì)話有效稽屏,當(dāng)前已經(jīng)存在的會(huì)話不受影響

關(guān)于MySQL事務(wù)隔離級(jí)別西乖,推薦大家一篇文章狐榔,很詳細(xì)地測(cè)試了四種事務(wù)隔離級(jí)別https://www.cnblogs.com/snsdzjlz320/p/5761387.html,相信大家讀了一定有所進(jìn)步获雕。

mysql :


set autocommit = 0

SET session TRANSACTION ISOLATION LEVEL Read uncommitted

SELECT * from t_user

INSERT INTO t_user (id, username, password) values (3, 'aaa', 'bbb')

COMMIT

ROLLBACK

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末薄腻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子届案,更是在濱河造成了極大的恐慌庵楷,老刑警劉巖萝玷,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜓斧,死亡現(xiàn)場(chǎng)離奇詭異挎春,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)脚线,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門渠旁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人挖胃,你說(shuō)我怎么就攤上這事躯喇√拢” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵扁誓,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蚀之,道長(zhǎng)蝗敢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任足删,我火速辦了婚禮寿谴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘失受。我一直安慰自己讶泰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布拂到。 她就那樣靜靜地躺著痪署,像睡著了一般兄旬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上悯森,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音绪撵,去河邊找鬼。 笑死音诈,一個(gè)胖子當(dāng)著我的面吹牛幻碱,可吹牛的內(nèi)容都是我干的绎狭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼收班,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼社付!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起啼辣,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤富弦,失蹤者是張志新(化名)和其女友劉穎腕柜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唉铜,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡幻枉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年椿肩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贡这。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡击奶,死狀恐怖辈双,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情柜砾,我是刑警寧澤湃望,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站痰驱,受9級(jí)特大地震影響证芭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜担映,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一檩帐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧另萤,春花似錦、人聲如沸诅挑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拔妥。三九已至忿危,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間没龙,已是汗流浹背铺厨。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留硬纤,地道東北人解滓。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像筝家,于是被迫代替她去往敵國(guó)和親洼裤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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

  • 一溪王、事務(wù) 1腮鞍、事務(wù)四要素:ACID 對(duì)于事務(wù)值骇,我之前的理解是很粗糙的,不就是為了保證操作的原子性么移国?一般訂單系統(tǒng)或...
    張偉科閱讀 1,306評(píng)論 0 5
  • 我們都知道事務(wù)的幾種性質(zhì)吱瘩,數(shù)據(jù)庫(kù)為了維護(hù)這些性質(zhì),尤其是一致性和隔離性迹缀,一般使用加鎖這種方式使碾。同時(shí)數(shù)據(jù)庫(kù)又是個(gè)高并...
    CodeKing2017閱讀 622評(píng)論 0 7
  • MySQL 事務(wù)的四種隔離級(jí)別 1 事務(wù)的基本要素(ACID) 原子性(Atomicity):事務(wù)開始后所有操作,...
    4a873e424089閱讀 646評(píng)論 0 0
  • 晚上7:00不到,學(xué)校會(huì)議室座無(wú)虛席嫂易,崔成林教授基于深度學(xué)習(xí)的有效小組合作教學(xué)研討會(huì)報(bào)告正式開始兄朋。 學(xué)習(xí)無(wú)極限,永...
    實(shí)小金燕閱讀 609評(píng)論 0 8
  • 18號(hào)第一次自己一個(gè)人坐綠皮火車。 從這一天起缕允,我就開始上演了人在囧途峡扩。 18號(hào) 那天清晨天氣很冷...
    王瘋瘋閱讀 219評(píng)論 2 0