數(shù)據(jù)庫的事務隔離級別,以及怎么解決這些問題

事務的定義?

事務是數(shù)據(jù)庫系統(tǒng)中執(zhí)行過程中的一個邏輯單位,由一個有限的數(shù)據(jù)庫操作部分構成.
解釋:
1.這個邏輯單位實際上是數(shù)據(jù)庫最小工作單元,不可再分.
2.有限的步驟就是說可能是一個sql或者多個sql的執(zhí)行

事務的基本要素(ACID)

  1. 原子性(Atomicity):事務開始后所有操作,要么全部成功,要么全部失敗
    例如:A給B轉賬,A余額減少100,對應B增加100,這兩個必須同時成功(提交事務)或失敗(回滾事務).
  1. 一致性(Consistency):事務開始到結束的約束完整性沒有被破壞.
    例如,主鍵唯一約束,字段定義長度約束,這里約束是數(shù)據(jù)庫本身層面的;
    還有就是業(yè)務方面的約束,例如A給B轉賬,A余額減少100,對應B增加50,雖然保證了原子性,但是破壞了約束.導致數(shù)據(jù)前后不一致.

3.隔離性(Isolation),當有了多個事務之后,那么多個事務應當是完全隔離開來的,他們互不干擾.但是當多個事務同時操作一個數(shù)據(jù)時,也要保證事務的透明性

4.持久性(Durable),對數(shù)據(jù)庫的操作,只要事務是成功的,那么結果就是永久性的,不可能因為其他原因導致數(shù)據(jù)不正確.例如當數(shù)據(jù)庫宕機,持久性通過red log和double write雙寫緩沖來實現(xiàn),我們操作數(shù)據(jù)的時候會寫到內存中,同時也會記錄redo log,如果再寫入磁盤之前出異常,在重啟之后就可以讀取redo log的內容寫入磁盤中,保證數(shù)據(jù)永久性.

事務并發(fā)帶來的四個問題(臟讀,不可重復讀/幻讀/數(shù)據(jù)丟失)

1.臟讀(臟讀臟讀顧名思義是讀出了問題,讀了別人沒有提交的數(shù)據(jù))
假如小名明賬戶有100元,這里有兩個事務A,B;在A事務查看賬戶時是100,然后這個時候B事務將100改成了200元,但是事務B還沒提交,恰巧這時A又去看了自己賬戶發(fā)現(xiàn)錢變成了200元,如果這時候B回滾事務.那么讀取的數(shù)據(jù)就是臟數(shù)據(jù).這種現(xiàn)象總結下來就是A事務讀取了B還沒有提交的事務,稱作臟讀.

2不可重復讀(多次讀取同一個數(shù)據(jù)發(fā)現(xiàn)結果不一致)
在一次事務中的多次查詢同一數(shù)據(jù)發(fā)現(xiàn)查詢結果不一致.

3.幻讀(兩次查詢結果發(fā)現(xiàn)條數(shù)不一致)
在一個事務中可能有人提交了新的數(shù)據(jù),導致查詢結果數(shù)據(jù)量不一致

4.數(shù)據(jù)丟失
兩次更新操作可能會覆蓋上一次數(shù)據(jù)的寫入,導致數(shù)據(jù)丟失問題.

對于事務帶來的問題的解決方案(四種隔離級別)

SQL標準定義了四種隔離級別:

Read Uncommitted(讀取未提交內容)
在一個事務中沦补,可以讀取到其他事務未提交的數(shù)據(jù)變化,這種讀取其他會話還沒提交的事務挽拔,叫做臟讀現(xiàn)象涝开,在生產(chǎn)環(huán)境中切勿使用羡榴。

Read Committed(讀取提交內容)
在一個事務中,可以讀取到其他事務已經(jīng)提交的數(shù)據(jù)變化,這種讀取也就叫做不可重復讀益愈,因為兩次同樣的查詢可能會得到不一樣的結果户誓。

Repeatable Read(可重讀)
MySQL默認隔離級別饼灿,在一個事務中,直到事務結束前帝美,都可以反復讀取到事務剛開始時看到的數(shù)據(jù)碍彭,并一直不會發(fā)生變化,避免了臟讀悼潭、不可重復讀現(xiàn)象庇忌,但是它還是無法解決幻讀問題。

Serializable(可串行化)
這是最高的隔離級別舰褪,它強制事務串行執(zhí)行皆疹,避免了前面說的幻讀現(xiàn)象,簡單來說占拍,它會在讀取的每一行數(shù)據(jù)上都加鎖墙基,所以可能會導致大量的超時和鎖爭用問題。

目前mysql默認使用可重復讀隔離級別.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末刷喜,一起剝皮案震驚了整個濱河市残制,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掖疮,老刑警劉巖初茶,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異浊闪,居然都是意外死亡恼布,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門搁宾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來折汞,“玉大人,你說我怎么就攤上這事盖腿∷” “怎么了损同?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鸟款。 經(jīng)常有香客問我膏燃,道長,這世上最難降的妖魔是什么何什? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任组哩,我火速辦了婚禮,結果婚禮上处渣,老公的妹妹穿的比我還像新娘伶贰。我一直安慰自己,他們只是感情好罐栈,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布幕袱。 她就那樣靜靜地躺著,像睡著了一般悠瞬。 火紅的嫁衣襯著肌膚如雪们豌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天浅妆,我揣著相機與錄音望迎,去河邊找鬼。 笑死凌外,一個胖子當著我的面吹牛辩尊,可吹牛的內容都是我干的。 我是一名探鬼主播康辑,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼摄欲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了疮薇?” 一聲冷哼從身側響起胸墙,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎按咒,沒想到半個月后迟隅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡励七,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年智袭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掠抬。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡吼野,死狀恐怖抽米,靈堂內的尸體忽然破棺而出膨报,到底是詐尸還是另有隱情巴比,我是刑警寧澤僚焦,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站谚攒,受9級特大地震影響,放射性物質發(fā)生泄漏氛堕。R本人自食惡果不足惜馏臭,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望讼稚。 院中可真熱鬧括儒,春花似錦、人聲如沸锐想。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赠摇。三九已至固逗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間藕帜,已是汗流浹背烫罩。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留洽故,地道東北人贝攒。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像时甚,于是被迫代替她去往敵國和親隘弊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內容