數(shù)據(jù)庫事務(wù)的四大特性及四個隔離級別

四大特性

如果一個數(shù)據(jù)庫支持事務(wù)的操作赞赖,那么該數(shù)據(jù)庫需要具備ACID四大特性:

1.原子性——Atomicity

原子性指事務(wù)里的所有操作要么一起成功,要么一起失敗回滾辕近。

2.一致性——Consistency

數(shù)據(jù)在事務(wù)執(zhí)行前后匿垄,從一個一致性狀態(tài)轉(zhuǎn)變至另一個一致性狀態(tài)漏峰。

舉例說明浅乔,A和B之間轉(zhuǎn)賬,A有2000元靖苇,B有3000元顾复,無論A和B之間怎樣轉(zhuǎn)賬,他們的金額之和一定為5000萧芙,這就是一致性双揪。

3.隔離性——Isolation

當(dāng)多個事務(wù)并發(fā)訪問數(shù)據(jù)庫時,各個事務(wù)之間應(yīng)該是隔離的运吓,獨立的拘哨。一個事務(wù)不應(yīng)該影響其他事務(wù)的效果信峻。事務(wù)查看數(shù)據(jù)更新時产镐,數(shù)據(jù)要么是其他事務(wù)執(zhí)行前的狀態(tài),要么是其他事務(wù)執(zhí)行后的狀態(tài)丑掺,不能看到中間的狀態(tài)街州。

完全的隔離性只有事務(wù)串行執(zhí)行菇肃,那樣則不存在并發(fā)琐谤,效率很低斗忌,因此在開發(fā)中應(yīng)結(jié)合業(yè)務(wù)需求設(shè)置事務(wù)的隔離級別,隔離級別越高旺聚,效率越低织阳,反之,效率越高砰粹。四個隔離級別稍后介紹唧躲。

4.持久性——Durability

持久性,很好理解碱璃,就是說事務(wù)一旦提交弄痹,對數(shù)據(jù)庫造成的影響是永久性的,即便數(shù)據(jù)庫遭遇斷網(wǎng)斷電等故障嵌器,也不會丟失提交的更新肛真。

SQL SERVER通過write-ahead transaction log來確保事務(wù)提交后的持久性。事務(wù)在提交后爽航,對數(shù)據(jù)庫所做的改變首先會按順序記錄在事務(wù)日志中蚓让,然后才會寫入數(shù)據(jù)庫历极,當(dāng)數(shù)據(jù)庫遇到故障重啟后,首先會按順序檢查日志中該執(zhí)行但未執(zhí)行的更改,并依次執(zhí)行琼稻,保證了持久性萝风。


隔離級別

接下來介紹事務(wù)的四個隔離級別:

首先上結(jié)論睬塌,隔離級別從低到高贪磺,性能從高到低:

未提交讀刹前,引起臟讀;

提交讀,解決臟讀,引起不可重復(fù)讀;

可重復(fù)讀烫幕,解決臟讀振愿、不可重復(fù)讀,引起幻讀;

串行讀销凑,解決臟讀、不可重復(fù)讀呆馁、幻讀,數(shù)據(jù)保證了安全揖膜,但是失去并發(fā)性,效率低垦页。

1.未提交讀——Read Uncommitted

事務(wù)A修改了數(shù)據(jù)后宋光,無論該事務(wù)A有沒有提交赘艳,其他任何事務(wù)都可以讀取到事務(wù)A修改后的數(shù)據(jù)掰曾。

潛在問題:當(dāng)事務(wù)A修改數(shù)據(jù)后提交之前秒梅,其他事務(wù)讀取到A修改后的數(shù)據(jù),并在該數(shù)據(jù)基礎(chǔ)上進(jìn)行操作似袁。此時事務(wù)A提交失敗數(shù)據(jù)回滾,數(shù)據(jù)則出現(xiàn)錯誤昙衅。稱其他事務(wù)讀取到A事務(wù)修改但未提交的數(shù)據(jù)為“臟讀”扬霜。

鎖機(jī)制:select句指定 with (nolock)著瓶,即讀數(shù)據(jù)時不加共享鎖余蟹,允許其他事務(wù)更改數(shù)據(jù)葵孤,則可能讀到其他事務(wù)未提交的數(shù)據(jù)绑莺。

2.提交讀——Read Committed

事務(wù)A修改了數(shù)據(jù),只有A提交之后嫩絮,其他事務(wù)才可以看到A修改后的數(shù)據(jù)丛肢。解決了“臟讀”。

潛在問題:事務(wù)B讀取了數(shù)據(jù)后剿干,事務(wù)A對該數(shù)據(jù)進(jìn)行了修改并提交蜂怎,此時事務(wù)B再次以相同條件讀取數(shù)據(jù),發(fā)現(xiàn)前后兩次讀取的數(shù)據(jù)不一致置尔,這就是所謂的“不可重復(fù)讀”杠步。

鎖機(jī)制:讀取數(shù)據(jù)時正常加共享鎖即可,讀完釋放榜轿,無論事務(wù)有沒有提交幽歼。因為共享鎖和排他鎖互斥,所以只可能讀到排他鎖被釋放(即提交/回滾后)后的數(shù)據(jù)差导。

3.可重復(fù)讀——Repeatable Read

當(dāng)使用可重復(fù)讀隔離級別時试躏,在事務(wù)執(zhí)行期間會鎖定該事務(wù)以任何方式引用的所有行。因此设褐,如果在同一個事務(wù)中發(fā)出同一個SELECT語句兩次或更多次颠蕴,那么產(chǎn)生的結(jié)果數(shù)據(jù)集總是相同的。因此助析,使用可重復(fù)讀隔離級別的事務(wù)可以多次檢索同一行集犀被,并對它們執(zhí)行任意操作,直到提交或回滾操作終止該事務(wù)外冀。寡键。解決了“臟讀”、“不可重復(fù)讀”雪隧。

潛在問題:幻讀西轩,當(dāng)一個事務(wù)對數(shù)據(jù)的修改涉及到“全部數(shù)據(jù)行”時,比如修改表里所有行的column1字段為‘string1’脑沿,同時藕畔,另一個事務(wù)以新增的方式向表里插入了一條新的數(shù)據(jù)(可重復(fù)讀不允許其他事務(wù)修改已存在的數(shù)據(jù),因為可重復(fù)讀只在事務(wù)結(jié)束時才釋放鎖庄拇。但是對于新插入的數(shù)據(jù)沒辦法加鎖啊注服,新插入的數(shù)據(jù)由執(zhí)行插入sql的事務(wù)持有X鎖。)措近。那么之后溶弟,操作第一個事務(wù)的用戶就會發(fā)現(xiàn)明明自己修改了全部行的數(shù)據(jù),為什么還有一行數(shù)據(jù)沒有被修改瞭郑,就好像發(fā)生了幻覺一樣辜御,這就是幻讀。

鎖機(jī)制:對事務(wù)A掃描范圍內(nèi)的數(shù)據(jù)加U鎖或S鎖屈张,并一直持有直到事務(wù)結(jié)束擒权。因此其他事務(wù)不可以修改數(shù)據(jù)苇本,但是可以讀取數(shù)據(jù)。但是可以通過插入新數(shù)據(jù)的方式改變事務(wù)A的結(jié)果集菜拓。

4.串行讀——Serializable

串行讀,很容易理解笛厦,就是各個事務(wù)之間完全隔離纳鼎,串行執(zhí)行。

存在問題:已經(jīng)不是潛在問題了裳凸,問題很明顯贱鄙,串行執(zhí)行,那么并發(fā)效率就很低姨谷。

鎖機(jī)制:加Range lock逗宁,范圍鎖可以覆蓋到所查詢出的行的索引的鍵值范圍,而任何其他事務(wù)對范圍內(nèi)數(shù)據(jù)的修改梦湘、添加和刪除都需要修改索引瞎颗,所以此時將會被阻塞,因為范圍鎖覆蓋了索引條目捌议。深入了解Range Lock

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末哼拔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瓣颅,更是在濱河造成了極大的恐慌倦逐,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宫补,死亡現(xiàn)場離奇詭異檬姥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)粉怕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進(jìn)店門健民,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斋荞,你說我怎么就攤上這事荞雏。” “怎么了平酿?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵凤优,是天一觀的道長。 經(jīng)常有香客問我蜈彼,道長筑辨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任幸逆,我火速辦了婚禮棍辕,結(jié)果婚禮上暮现,老公的妹妹穿的比我還像新娘。我一直安慰自己楚昭,他們只是感情好栖袋,可當(dāng)我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抚太,像睡著了一般塘幅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尿贫,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天电媳,我揣著相機(jī)與錄音,去河邊找鬼庆亡。 笑死匾乓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的又谋。 我是一名探鬼主播拼缝,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼搂根!你這毒婦竟也來了珍促?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤剩愧,失蹤者是張志新(化名)和其女友劉穎猪叙,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仁卷,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡穴翩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了锦积。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芒帕。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖丰介,靈堂內(nèi)的尸體忽然破棺而出背蟆,到底是詐尸還是另有隱情,我是刑警寧澤哮幢,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布带膀,位于F島的核電站,受9級特大地震影響橙垢,放射性物質(zhì)發(fā)生泄漏垛叨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一柜某、第九天 我趴在偏房一處隱蔽的房頂上張望嗽元。 院中可真熱鬧敛纲,春花似錦、人聲如沸剂癌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽佩谷。三九已至办铡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間琳要,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工秤茅, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留稚补,地道東北人。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓框喳,卻偏偏與公主長得像课幕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子五垮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,446評論 2 359

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