事務(wù)特性及隔離問題

今天是學(xué)習(xí)計(jì)劃的第三天,今天打算繼續(xù)昨天探討的事務(wù)問題。
所以监右,今天的學(xué)習(xí)內(nèi)容是事務(wù)特性及隔離問題慨畸。
那事務(wù)都具有哪些特性呢?

  • 原子性:原子性是指事務(wù)是一個(gè)不可分割的工作單位谢翎,事務(wù)中的操作要么都發(fā)生,要么都不發(fā)生。
  • 一致性:事務(wù)前后數(shù)據(jù)的完整性必須保持一致遍愿。
  • 隔離性:事務(wù)的隔離性是指多個(gè)用戶并發(fā)訪問數(shù)據(jù)庫(kù)時(shí),一個(gè)用戶的事務(wù)不能被其它用戶的事務(wù)所干擾耘斩,多個(gè)并發(fā)事務(wù)之間數(shù)據(jù)要相互隔離沼填。
  • 持久性:持久性是指一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變就是永久性的括授,接下來即使數(shù)據(jù)庫(kù)發(fā)生故障也不應(yīng)該對(duì)其有任何影響坞笙。

多個(gè)線程開啟各自事務(wù)操作數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí),數(shù)據(jù)庫(kù)系統(tǒng)要負(fù)責(zé)隔離操作荚虚,以保證各個(gè)線程在獲取數(shù)據(jù)時(shí)的準(zhǔn)確性薛夜。如果不考慮隔離,可能會(huì)引發(fā)如下問題版述。

  1. 臟讀
    指一個(gè)事務(wù)讀取了另外一個(gè)事務(wù)未提交的數(shù)據(jù)梯澜。
    這是非常危險(xiǎn)的。舉個(gè)例子:假設(shè)A向B轉(zhuǎn)賬100元渴析,對(duì)應(yīng)的sql語句如下
update account set money = money - 100 where name = 'a';
update account set money = money + 100 where name = 'b';

當(dāng)?shù)谝粭lsql語句執(zhí)行完晚伙,第二條還沒執(zhí)行(A未提交時(shí)),如果此時(shí)B查詢自己的賬戶俭茧,就會(huì)發(fā)現(xiàn)自己多了100元錢咆疗,如果A等B走后再回滾,B就會(huì)以為轉(zhuǎn)賬成功了母债,但是錢又返還給了A午磁,從而導(dǎo)致B損失100元
臟讀被認(rèn)為是數(shù)據(jù)庫(kù)中的最重要問題,是不被任何數(shù)據(jù)庫(kù)所允許的。

  1. 不可重復(fù)讀
    在一個(gè)事務(wù)內(nèi)讀取表中的某一行數(shù)據(jù)漓踢,多次讀取結(jié)果不同牵署。
    舉個(gè)例子:例如銀行想查詢A帳戶余額,第一次查詢A帳戶為200元喧半,此時(shí)A向帳戶存了100元并提交了奴迅,銀行接著又進(jìn)行了一次查詢,此時(shí)A帳戶為300元了挺据。銀行兩次查詢不一致取具,可能就會(huì)很困惑,不知道哪次查詢是準(zhǔn)的扁耐。
    和臟讀的區(qū)別是暇检,臟讀是讀取前一事務(wù)未提交的臟數(shù)據(jù),不可重復(fù)讀是重新讀取了前一事務(wù)已提交的數(shù)據(jù)婉称。
    很多人認(rèn)為這種情況就對(duì)了块仆,無須困惑,當(dāng)然是后面的為準(zhǔn)王暗。我們可以考慮這樣一種情況悔据,比如銀行程序需要將查詢結(jié)果分別輸出到電腦屏幕和寫到文件中,結(jié)果在一個(gè)事務(wù)中針對(duì)輸出的目的地俗壹,進(jìn)行的兩次查詢不一致科汗,導(dǎo)致文件和屏幕中的結(jié)果不一致,銀行工作人員就不知道以哪個(gè)為準(zhǔn)了绷雏。
    不可重復(fù)讀在有些數(shù)據(jù)庫(kù)被認(rèn)為是沒有問題的头滔,所以它在某些數(shù)據(jù)庫(kù)中允許出現(xiàn)。
  2. 虛度(幻讀)
    是指在一個(gè)事務(wù)內(nèi)讀取到了別的事務(wù)插入的數(shù)據(jù)涎显,導(dǎo)致前后讀取不一致坤检。
    舉個(gè)例子:假如丙存款100元未提交,這時(shí)銀行做報(bào)表統(tǒng)計(jì)account表中所有用戶的總額為500元期吓,然后丙提交了早歇,這時(shí)銀行再統(tǒng)計(jì)發(fā)現(xiàn)帳戶為600元了,造成虛讀同樣會(huì)使銀行不知所措膘婶,到底以哪個(gè)為準(zhǔn)。
    會(huì)發(fā)現(xiàn)蛀醉,虛讀和不可重復(fù)讀是十分相似的悬襟,以致于很多人很難分辨它們,你只需要知道拯刁,它們最大的區(qū)別是:不可重復(fù)讀讀取到的是更新(update)數(shù)據(jù)脊岳,而虛讀讀取到的是插入(insert)數(shù)據(jù)。
    同樣,虛讀在有些數(shù)據(jù)庫(kù)也被認(rèn)為不是問題割捅,允許該現(xiàn)象出現(xiàn)奶躯。

說完了引發(fā)的問題后,我們引出今天的主角亿驾,事務(wù)隔離級(jí)別嘹黔。
數(shù)據(jù)庫(kù)共定義了四種隔離級(jí)別:

  • Serializable:可避免臟讀、不可重復(fù)讀莫瞬、虛讀情況的發(fā)生儡蔓。(串行化)
  • Repeatable read:可避免臟讀、不可重復(fù)讀情況的發(fā)生疼邀。(可重復(fù)讀)不可以避免虛讀
  • Read committed:可避免臟讀情況發(fā)生(讀已提交)
  • Read uncommitted:最低級(jí)別喂江,以上情況均無法保證。(讀未提交)
    隔離級(jí)別由高到低排列:Serializable>Repeatable read>Read committed>Read uncommitted
    數(shù)據(jù)庫(kù)隔離問題危害級(jí)別由高到低:臟讀>不可重復(fù)讀>虛讀

在Oracle數(shù)據(jù)庫(kù)中旁振,默認(rèn)隔離級(jí)別是Read committed
在MySQL數(shù)據(jù)庫(kù)中获询,默認(rèn)隔離級(jí)別是Repeatable read
由此可以發(fā)現(xiàn),基本所有的數(shù)據(jù)庫(kù)都不會(huì)把隔離級(jí)別設(shè)置成最高拐袜,也不會(huì)設(shè)置成最低吉嚣。
因?yàn)榘踩?jí)別越高,處理效率就越低阻肿,但是安全級(jí)別越低瓦戚,危害就越大。

在數(shù)據(jù)庫(kù)中丛塌,可以通過
set transaction isolation level 設(shè)置事務(wù)隔離級(jí)別
select @@tx_isolation 查詢當(dāng)前事務(wù)隔離級(jí)別
兩條語句控制事務(wù)隔離級(jí)別较解。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市赴邻,隨后出現(xiàn)的幾起案子印衔,更是在濱河造成了極大的恐慌,老刑警劉巖姥敛,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奸焙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡彤敛,警方通過查閱死者的電腦和手機(jī)与帆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來墨榄,“玉大人玄糟,你說我怎么就攤上這事“乐龋” “怎么了阵翎?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵逢并,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我郭卫,道長(zhǎng)砍聊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任贰军,我火速辦了婚禮玻蝌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谓形。我一直安慰自己灶伊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布寒跳。 她就那樣靜靜地躺著聘萨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪童太。 梳的紋絲不亂的頭發(fā)上米辐,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音书释,去河邊找鬼翘贮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛爆惧,可吹牛的內(nèi)容都是我干的狸页。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼扯再,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼芍耘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起熄阻,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤斋竞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后秃殉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坝初,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年钾军,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鳄袍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吏恭,死狀恐怖拗小,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情砸泛,我是刑警寧澤十籍,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站唇礁,受9級(jí)特大地震影響勾栗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盏筐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一围俘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧琢融,春花似錦界牡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至纳令,卻和暖如春挽荠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背平绩。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工圈匆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捏雌。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓跃赚,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親性湿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纬傲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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