自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

程序員經(jīng)典面試題,談一談MySQL中的事務(wù)

數(shù)據(jù)庫(kù) MySQL
我們都知道,計(jì)算機(jī)處理的速度非常地快,但是再快的計(jì)算機(jī),也面臨著這樣的問(wèn)題,同一個(gè)時(shí)間里面有著非常多的請(qǐng)求都要對(duì)統(tǒng)一資源發(fā)生操作。所以,在數(shù)據(jù)庫(kù)中,引入事務(wù)來(lái)解決這樣的問(wèn)題。

我們都知道,計(jì)算機(jī)處理的速度非常地快,但是再快的計(jì)算機(jī),也面臨著這樣的問(wèn)題,同一個(gè)時(shí)間里面有著非常多的請(qǐng)求都要對(duì)統(tǒng)一資源發(fā)生操作。所以,在數(shù)據(jù)庫(kù)中,引入事務(wù)來(lái)解決這樣的問(wèn)題。 

[[321408]] 

我們舉個(gè)簡(jiǎn)單的例子,我在街上買(mǎi)了2排益力多,要支付寶轉(zhuǎn)25元給商家,這個(gè)時(shí)候會(huì)這樣操作,支付寶先檢查我的余額是否還有25元,然后從我的余額中扣取25元,然后商家的支付寶增加25元。假如我的支付寶剛好只有25元,在轉(zhuǎn)給商家的瞬間,我用另外一個(gè)手機(jī),在拼多多上面買(mǎi)了一個(gè)20元的西瓜,也用支付寶支付,因?yàn)橛辛藬?shù)據(jù)庫(kù)事務(wù),這兩個(gè)操作并不會(huì)同時(shí)成功。

Mysql的數(shù)據(jù)庫(kù)有著4大特性,我們稱(chēng)之為ACID。即原子性,一致性,隔離性,與持久性。

原子性(atomicity)一個(gè)事務(wù)必須被視為一個(gè)不可分割的最小工作單元,整個(gè)事務(wù)中的所有操作要么全部提交成功,要么全部失敗回滾,對(duì)于一個(gè)事務(wù)來(lái)說(shuō),不可能只執(zhí)行其中的一部分操作,這就是事務(wù)的原子性。在上述例子中,要么我扣了25元,益力多的商家多了25元,要么我不扣錢(qián),商家也不多錢(qián)。不會(huì)存在扣了我的錢(qián),商家又沒(méi)收到錢(qián)的情況。那估計(jì)每天都是各種投訴跟糾紛。

一致性(consistency)數(shù)據(jù)庫(kù)總是從一個(gè)一致性的狀態(tài)轉(zhuǎn)換到另一個(gè)一致性的狀態(tài)。(在前面的例子中,一致性確保了,這25元要么在我這還沒(méi)給商家,要么已經(jīng)到達(dá)商家賬戶了,不會(huì)存在這25元憑空消失的情況。)

隔離性(isolation)通常來(lái)說(shuō),一個(gè)事務(wù)所做的修改在最終提交以前,對(duì)其他事務(wù)是不可見(jiàn)的。(在前面的例子中,當(dāng)我還在支付給小賣(mài)部賣(mài)家25元的時(shí)候,對(duì)于我另外一個(gè)在拼多多上付款的事務(wù),是覺(jué)得我還有25元的,只有當(dāng)我整個(gè)事務(wù)提交后,另外一個(gè)事務(wù)才知道我已經(jīng)扣除了對(duì)應(yīng)的數(shù)額。所以,我們?cè)趫?zhí)行扣除的時(shí)候,同時(shí)也要判斷余額是否足夠。)

持久性(durability)一旦事務(wù)提交,則其所做的修改將永久保存到數(shù)據(jù)庫(kù)。(此時(shí)即使系統(tǒng)崩潰,修改的數(shù)據(jù)也不會(huì)丟失。)

實(shí)時(shí)上,如果數(shù)據(jù)庫(kù)要嚴(yán)格遵循這這個(gè)性質(zhì),勢(shì)必會(huì)造成數(shù)據(jù)庫(kù)的性能降低。所以,在InnoDB中,是有著多種不同的事務(wù)級(jí)別的。分別是讀未提交,讀已提交,可重復(fù)讀,,與串行化四種突通的級(jí)別。

讀未提交:別人改數(shù)據(jù)的事務(wù)尚未提交,我在我的事務(wù)中也能讀到。上述例子,假如拼多多的扣款是發(fā)生在我的金額已經(jīng)減少25之后,但是事務(wù)還沒(méi)提交,這個(gè)時(shí)候讀取數(shù)據(jù)庫(kù),就已經(jīng)讀到數(shù)據(jù)是0了。很顯然,如果這個(gè)時(shí)候,前面的時(shí)候回滾了,那么這個(gè)讀取到的結(jié)果稱(chēng)之為臟讀。

讀已提交:別人改數(shù)據(jù)的事務(wù)已經(jīng)提交,我在我的事務(wù)中才能讀到。在上述例子中,如果扣減25的事務(wù)未完成,那么讀到的都是結(jié)果25。假如在后面的事務(wù)中,多次讀取余額,那么就有可能讀到25,可能讀到0,我們稱(chēng)之為不可重復(fù)讀。

可重復(fù)讀:別人改數(shù)據(jù)的事務(wù)已經(jīng)提交,我在我的事務(wù)中也不去讀。這種在第一次讀數(shù)據(jù)的時(shí)候,實(shí)際上就已經(jīng)形成對(duì)應(yīng)的視圖,后面只能讀到對(duì)應(yīng)的數(shù)據(jù)。

串行:我的事務(wù)尚未提交,別人就別想改數(shù)據(jù)。這個(gè)是嚴(yán)格串行化,在上述例子中,只有前面的扣除25元完成后,才能開(kāi)始后面的事務(wù)。 

程序員經(jīng)典面試題,談一談Mysql中的事務(wù) 

這4種隔離級(jí)別,并行性能依次降低,安全性依次提高。好了,今天我們簡(jiǎn)單介紹了mysql的事務(wù),不知道對(duì)你是否有所啟發(fā),歡迎大家關(guān)注我,共同學(xué)習(xí),共同進(jìn)步。

 

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2016-12-07 13:34:34

阿里面試Java程序員

2020-04-26 09:48:11

MySQL數(shù)據(jù)庫(kù)架構(gòu)

2020-05-06 15:02:58

MySQL數(shù)據(jù)庫(kù)技術(shù)

2020-04-12 22:29:50

程序員MySQL數(shù)據(jù)

2020-02-06 08:58:09

程序員技術(shù)數(shù)據(jù)庫(kù)

2012-05-25 10:15:06

Java程序員面試題

2020-03-02 17:00:24

程序員數(shù)據(jù)庫(kù)MySQL

2019-09-20 14:25:21

程序員Google人生第一份工作

2019-10-18 09:40:19

程序員固態(tài)硬盤(pán)Linux

2020-02-07 10:14:07

程序員設(shè)計(jì)人生第一份工作

2020-05-11 10:48:01

技術(shù)資訊

2020-03-18 09:33:47

數(shù)據(jù)庫(kù)程序員數(shù)組

2021-07-28 20:12:17

WindowsHeap內(nèi)存

2024-10-11 17:09:27

2018-01-23 09:37:59

程序員面試薪資

2014-07-28 14:00:40

linux面試題

2018-12-03 09:42:32

Java程序員阿里面試

2011-03-29 14:31:41

CC++

2009-08-02 10:21:39

ASP.NET程序員面ASP.NET

2022-07-04 10:51:27

數(shù)據(jù)中臺(tái)數(shù)據(jù)倉(cāng)庫(kù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)