MySQL面試題 | 附答案解析(八)

事務(wù)

1. 什么是數(shù)據(jù)庫事務(wù)?

事務(wù)是一個(gè)不可分割的數(shù)據(jù)庫操作序列硫眨,也是數(shù)據(jù)庫并發(fā)控制的基本單位郊酒,其執(zhí)行的結(jié)果必須使數(shù)據(jù)庫從一種一致性狀態(tài)變到另一種一致性狀態(tài)状蜗。事務(wù)是邏輯上的一組操作确封,要么都執(zhí)行除呵,要么都不執(zhí)行。

事務(wù)最經(jīng)典也經(jīng)常被拿出來說例子就是轉(zhuǎn)賬了爪喘。

假如小明要給小紅轉(zhuǎn)賬1000元颜曾,這個(gè)轉(zhuǎn)賬會(huì)涉及到兩個(gè)關(guān)鍵操作就是:將小明的余額減少1000元,將小紅的余額增加1000元秉剑。萬一在這兩個(gè)操作之間突然出現(xiàn)錯(cuò)誤比如銀行系統(tǒng)崩潰泛豪,導(dǎo)致小明余額減少而小紅的余額沒有增加,這樣就不對(duì)了。事務(wù)就是保證這兩個(gè)關(guān)鍵操作要么都成功诡曙,要么都要失敗臀叙。

2. 事物的四大特性(ACID)介紹一下?

關(guān)系性數(shù)據(jù)庫需要遵循ACID規(guī)則,具體內(nèi)容如下:

(1)原子性:事務(wù)是最小的執(zhí)行單位价卤,不允許分割劝萤。事務(wù)的原子性確保動(dòng)作要么全部完成,要么完全不起作用荠雕;

(2)一致性:執(zhí)行事務(wù)前后稳其,數(shù)據(jù)保持一致驶赏,多個(gè)事務(wù)對(duì)同一個(gè)數(shù)據(jù)讀取的結(jié)果是相同的炸卑;

(3)隔離性:并發(fā)訪問數(shù)據(jù)庫時(shí),一個(gè)用戶的事務(wù)不被其他事務(wù)所干擾煤傍,各并發(fā)事務(wù)之間數(shù)據(jù)庫是獨(dú)立的盖文;

(4)持久性:一個(gè)事務(wù)被提交之后。它對(duì)數(shù)據(jù)庫中數(shù)據(jù)的改變是持久的蚯姆,即使數(shù)據(jù)庫發(fā)生故障也不應(yīng)該對(duì)其有任何影響五续。

3. 什么是臟讀?幻讀龄恋?不可重復(fù)讀疙驾?

(1)臟讀(Drity Read):某個(gè)事務(wù)已更新一份數(shù)據(jù),另一個(gè)事務(wù)在此時(shí)讀取了同一份數(shù)據(jù)郭毕,由于某些原因它碎,前一個(gè)RollBack了操作,則后一個(gè)事務(wù)所讀取的數(shù)據(jù)就會(huì)是不正確的显押。

(2)不可重復(fù)讀(Non-repeatable read):在一個(gè)事務(wù)的兩次查詢之中數(shù)據(jù)不一致扳肛,這可能是兩次查詢過程中間插入了一個(gè)事務(wù)更新的原有的數(shù)據(jù)。

(3)幻讀(Phantom Read):在一個(gè)事務(wù)的兩次查詢中數(shù)據(jù)筆數(shù)不一致乘碑,例如有一個(gè)事務(wù)查詢了幾列(Row)數(shù)據(jù)挖息,而另一個(gè)事務(wù)卻在此時(shí)插入了新的幾列數(shù)據(jù),先前的事務(wù)在接下來的查詢中兽肤,就會(huì)發(fā)現(xiàn)有幾列數(shù)據(jù)是它先前所沒有的套腹。

4. 什么是事務(wù)的隔離級(jí)別?MySQL的默認(rèn)隔離級(jí)別是什么资铡?

為了達(dá)到事務(wù)的四大特性电禀,數(shù)據(jù)庫定義了4種不同的事務(wù)隔離級(jí)別,由低到高依次為Read uncommitted害驹、Read committed鞭呕、Repeatable read、Serializable,這四個(gè)級(jí)別可以逐個(gè)解決臟讀葫松、不可重復(fù)讀瓦糕、幻讀這幾類問題。

SQL 標(biāo)準(zhǔn)定義了四個(gè)隔離級(jí)別:

(1)D-UNCOMMITTED(讀取未提交):最低的隔離級(jí)別腋么,允許讀取尚未提交的數(shù)據(jù)變更咕娄,可能會(huì)導(dǎo)致臟讀、幻讀或不可重復(fù)讀珊擂。

(2)D-COMMITTED(讀取已提交):允許讀取并發(fā)事務(wù)已經(jīng)提交的數(shù)據(jù)圣勒,可以阻止臟讀,但是幻讀或不可重復(fù)讀仍有可能發(fā)生摧扇。

REPEATABLE-READ(可重復(fù)讀):對(duì)同一字段的多次讀取結(jié)果都是一致的圣贸,除非數(shù)據(jù)是被本身事務(wù)自己所修改,可以阻止臟讀和不可重復(fù)讀扛稽,但幻讀仍有可能發(fā)生吁峻。

(3RIALIZABLE(可串行化):最高的隔離級(jí)別,完全服從ACID的隔離級(jí)別在张。所有的事務(wù)依次逐個(gè)執(zhí)行用含,這樣事務(wù)之間就完全不可能產(chǎn)生干擾,也就是說帮匾,該級(jí)別可以防止臟讀啄骇、不可重復(fù)讀以及幻讀。

這里需要注意的是:Mysql 默認(rèn)采用的 REPEATABLE_READ隔離級(jí)別 Oracle 默認(rèn)采用的 READ_COMMITTED隔離級(jí)別

事務(wù)隔離機(jī)制的實(shí)現(xiàn)基于鎖機(jī)制和并發(fā)調(diào)度瘟斜。其中并發(fā)調(diào)度使用的是MVVC(多版本并發(fā)控制)缸夹,通過保存修改的舊版本信息來支持并發(fā)一致性讀和回滾等特性。

因?yàn)楦綦x級(jí)別越低哼转,事務(wù)請(qǐng)求的鎖越少明未,所以大部分?jǐn)?shù)據(jù)庫系統(tǒng)的隔離級(jí)別都是READ-COMMITTED(讀取提交內(nèi)容):,但是你要知道的是InnoDB 存儲(chǔ)引擎默認(rèn)使用 **REPEATABLE-READ(可重讀)**并不會(huì)有任何性能損失壹蔓。

InnoDB 存儲(chǔ)引擎在 分布式事務(wù) 的情況下一般會(huì)用到**SERIALIZABLE(可串行化)**隔離級(jí)別趟妥。

最后,小編分類整理了許多java進(jìn)階學(xué)習(xí)材料和BAT面試給熱愛IT行業(yè)的你佣蓉,如果需要資料的請(qǐng)轉(zhuǎn)發(fā)此文章后再私聊小編回復(fù)【java】就能領(lǐng)取2019年java進(jìn)階學(xué)習(xí)資料和BAT面試題以及《Effective Java》(第3版)電子版書籍披摄。也可以加群:712263501領(lǐng)取海量學(xué)習(xí)資料進(jìn)行學(xué)習(xí)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末勇凭,一起剝皮案震驚了整個(gè)濱河市疚膊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌虾标,老刑警劉巖寓盗,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡傀蚌,警方通過查閱死者的電腦和手機(jī)基显,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來善炫,“玉大人撩幽,你說我怎么就攤上這事÷嵋眨” “怎么了窜醉?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長艺谆。 經(jīng)常有香客問我榨惰,道長,這世上最難降的妖魔是什么擂涛? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任读串,我火速辦了婚禮聊记,結(jié)果婚禮上撒妈,老公的妹妹穿的比我還像新娘。我一直安慰自己排监,他們只是感情好狰右,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著舆床,像睡著了一般棋蚌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挨队,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天谷暮,我揣著相機(jī)與錄音,去河邊找鬼盛垦。 笑死湿弦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的腾夯。 我是一名探鬼主播颊埃,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蝶俱!你這毒婦竟也來了班利?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤榨呆,失蹤者是張志新(化名)和其女友劉穎罗标,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闯割,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年皿哨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纽谒。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡证膨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鼓黔,到底是詐尸還是另有隱情央勒,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布澳化,位于F島的核電站崔步,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏缎谷。R本人自食惡果不足惜井濒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望列林。 院中可真熱鬧瑞你,春花似錦、人聲如沸希痴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽砌创。三九已至虏缸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嫩实,已是汗流浹背刽辙。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留甲献,地道東北人宰缤。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像竟纳,于是被迫代替她去往敵國和親撵溃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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