最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
mysql數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別及臟讀、不可重復(fù)讀、幻讀是什么

MySQL數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別及臟讀、不可重復(fù)讀、幻讀是什么?這個(gè)問(wèn)題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過(guò)這個(gè)問(wèn)題能讓你收獲頗深。下面是小編給大家?guī)?lái)的參考內(nèi)容,讓我們一起來(lái)看看吧!

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),翁牛特企業(yè)網(wǎng)站建設(shè),翁牛特品牌網(wǎng)站建設(shè),網(wǎng)站定制,翁牛特網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,翁牛特網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

一、數(shù)據(jù)庫(kù)事務(wù)正確執(zhí)行的四個(gè)基本要素

1.1ACID原則。

??ACID原則是數(shù)據(jù)庫(kù)事務(wù)正常執(zhí)行的四個(gè)基本要素,分別指原子性、一致性、獨(dú)立性及持久性。

??事務(wù)的原子性(Atomicity)是指一個(gè)事務(wù)要么全部執(zhí)行,要么不執(zhí)行,也就是說(shuō)一個(gè)事務(wù)不可能只執(zhí)行了一半就停止了,比如你從取款機(jī)取錢,這個(gè)事務(wù)可以分成兩個(gè)步驟:1劃卡,2出錢。不可能劃了卡,而錢卻沒出來(lái),這兩步必須同時(shí)完成.要么就不完成。

??事務(wù)的一致性(Consistency)是指事務(wù)的運(yùn)行并不改變數(shù)據(jù)庫(kù)中數(shù)據(jù)的一致性。例如,完整性約束了a+b=10,一個(gè)事務(wù)改變了a,那么b也應(yīng)該隨之改變?;蛘哒f(shuō),A給B轉(zhuǎn)賬300元錢,那么A的賬戶就必須是減少300元錢,B的賬戶就必須是增加300元錢,不能說(shuō)是增加或減少了如200元錢等,這里符合事務(wù)的原子性,但是不符合事務(wù)的一致性。往實(shí)際業(yè)務(wù)中沒有這么簡(jiǎn)單,往是類似買東西扣庫(kù)存這類的邏輯,主表里有庫(kù)存,庫(kù)存表里有庫(kù)存,SKU表里還有,然后就因?yàn)樵O(shè)計(jì)缺陷,就算加了事務(wù)還是出現(xiàn)了超賣、SKU庫(kù)存對(duì)不上總庫(kù)存的問(wèn)題,這個(gè)就是一致性不滿足的了。

??獨(dú)立性(Isolation):事務(wù)的獨(dú)立性也有稱作隔離性,是指兩個(gè)以上的事務(wù)不會(huì)出現(xiàn)交錯(cuò)執(zhí)行的狀態(tài),因?yàn)檫@樣可能會(huì)導(dǎo)致數(shù)據(jù)不一致。

??持久性(Durability):一旦事務(wù)提交或者回滾,這個(gè)狀態(tài)都要持久化到數(shù)據(jù)庫(kù)中,不考慮隔離性會(huì)出現(xiàn)的讀問(wèn)題。


1.2臟讀、不可重復(fù)讀,幻讀。

??臟讀(Dirty read):在一個(gè)事務(wù)中讀取到另一個(gè)事務(wù)沒有提交的數(shù)據(jù)。例如,當(dāng)一個(gè)事務(wù)正在訪問(wèn)數(shù)據(jù),并且對(duì)數(shù)據(jù)進(jìn)行了修改,而這種修改還沒有提交到數(shù)據(jù)庫(kù)中,這時(shí),另外一個(gè)事務(wù)也訪問(wèn)這個(gè)數(shù)據(jù),然后使用了這個(gè)數(shù)據(jù)。

??不可重復(fù)讀(NonRepeatable Read):既不能讀到相同的數(shù)據(jù)內(nèi)容。是指在一個(gè)事務(wù)內(nèi),多次讀同一數(shù)據(jù),在這個(gè)事務(wù)還沒有結(jié)束時(shí),另外一個(gè)事務(wù)也訪問(wèn)該同一數(shù)據(jù)并且修改,那么,在第一個(gè)事務(wù)中的兩次讀數(shù)據(jù)之間,由于第二個(gè)事務(wù)的修改,第一個(gè)事務(wù)兩次讀到的的數(shù)據(jù)可能是不一樣的。

??幻讀(Phantom Read):在一個(gè)事務(wù)中,兩次查詢的結(jié)果不一致(針對(duì)的insert操作) 。是指當(dāng)事務(wù)不是獨(dú)立執(zhí)行時(shí)發(fā)生的一種現(xiàn)象,例如第一個(gè)事務(wù)對(duì)一個(gè)表中的數(shù)據(jù)進(jìn)行了修改,這種修改涉及到表中的全部數(shù)據(jù)行。同時(shí),第二個(gè)事務(wù)也修改這個(gè)表中的數(shù)據(jù),這種修改是向表中插入一行新數(shù)據(jù)。那么,以后操作第一個(gè)事務(wù)的用戶發(fā)現(xiàn)表中還有沒有修改的數(shù)據(jù)行,就好象發(fā)生了幻覺一樣。
?例如,一個(gè)編輯人員更改作者提交的文檔,但當(dāng)生產(chǎn)部門將其更改內(nèi)容合并到該文檔的主復(fù)本時(shí),發(fā)現(xiàn)作者已將未編輯的新材料添加到該文檔中。如果在編輯人員和生產(chǎn)部門完成對(duì)原始文檔的處理之前,任何人都不能將新材料添加到文檔中,則可以避免該問(wèn)題。


二、數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別

??數(shù)據(jù)庫(kù)事務(wù)的隔離級(jí)別有4個(gè),由低到高依次為Read uncommitted(讀未提交)、Read committed(讀提交) 、Repeatable read(可重復(fù)讀)、Serializable(序列化),這四個(gè)級(jí)別可以逐個(gè)解決臟讀 、不可重復(fù)讀 、幻讀這幾類問(wèn)題。

2.1 Read uncommitted(讀未提交)

??公司發(fā)工資了,領(lǐng)導(dǎo)把5000元打到singo的賬號(hào)上,但是該事務(wù)并未提交,而singo正好去查看賬戶,發(fā)現(xiàn)工資到賬5000元整,非常高興。可是不幸的是,領(lǐng)導(dǎo)發(fā)現(xiàn)發(fā)給singo的工資金應(yīng)該是2000元,于是迅速回滾了事務(wù)(將5000元回滾),修改金額后(修改為2000元),將事務(wù)提交,最后singo實(shí)際的工資只有 2000元,singo空歡喜一場(chǎng)。

??出現(xiàn)上述情況,即我們所說(shuō)的臟讀 ,兩個(gè)并發(fā)的事務(wù),“事務(wù)A:領(lǐng)導(dǎo)給singo發(fā)工資”,“事務(wù)B:singo查詢工資賬戶”,事務(wù)B讀取了事務(wù)A尚未提交的數(shù)據(jù)。

??當(dāng)隔離級(jí)別設(shè)置為Read uncommitted(讀未提交)時(shí),就可能出現(xiàn)臟讀,如果我們此時(shí)將隔離級(jí)別提升為Read committed(讀已提交),便可避免臟讀。


2.2 Read committed(讀已提交)

??singo拿著工資卡去消費(fèi),系統(tǒng)讀取到卡里確實(shí)有2000元,而此時(shí)她的老婆也正好在網(wǎng)上轉(zhuǎn)賬,把singo工資卡的2000元轉(zhuǎn)到另一賬戶,并在 singo之前提交了事務(wù),當(dāng)singo扣款時(shí),系統(tǒng)檢查到singo的工資卡已經(jīng)沒有錢,扣款失敗,singo十分納悶,明明卡里有錢,到底是啥情況呢?

??出現(xiàn)上述情況,即我們所說(shuō)的不可重復(fù)讀 ,兩個(gè)并發(fā)的事務(wù),“事務(wù)A:singo消費(fèi)”、“事務(wù)B:singo的老婆網(wǎng)上轉(zhuǎn)賬”,事務(wù)A事先讀取了數(shù)據(jù),事務(wù)B緊接了更新了數(shù)據(jù),并提交了事務(wù),而事務(wù)A再次讀取該數(shù)據(jù)時(shí),數(shù)據(jù)已經(jīng)發(fā)生了改變。

??當(dāng)隔離級(jí)別設(shè)置為Read committed(讀已提交)時(shí),避免了臟讀,但是可能會(huì)造成不可重復(fù)讀(既不能讀到相同的數(shù)據(jù)內(nèi)容)。

??大多數(shù)數(shù)據(jù)庫(kù)的默認(rèn)級(jí)別就是Read committed(讀已提交),比如Sql Server , Oracle,此時(shí)如果將隔離級(jí)別提升為Repeatable read(可重復(fù)讀),可以避免臟讀和不可重復(fù)讀的發(fā)生。


2.3 Repeatable read(可重復(fù)讀)

??當(dāng)隔離級(jí)別設(shè)置為Repeatable read(可重復(fù)讀)時(shí),可以避免不可重復(fù)讀。當(dāng)singo拿著工資卡去消費(fèi)時(shí),一旦系統(tǒng)開始讀取工資卡信息(即事務(wù)開始),singo的老婆就不可能對(duì)該記錄進(jìn)行修改,也就是singo的老婆不能在此時(shí)轉(zhuǎn)賬。

??(這里兩個(gè)博客舉得例子不一樣,請(qǐng)各位看官指明原因)或者說(shuō),有A、B兩個(gè)會(huì)話,分別開啟兩個(gè)事務(wù),然后A向B轉(zhuǎn)了500元錢,A 提交事務(wù),B再去查看,發(fā)現(xiàn)依舊是原錢數(shù),B只能結(jié)束當(dāng)前事務(wù),在開啟一個(gè)新事務(wù),才能查詢到數(shù)據(jù)的變化,這樣便避免了不可重復(fù)讀。如果我們?cè)O(shè)置了Seriizable(序列化),就相當(dāng)于鎖表,某一時(shí)間內(nèi)只允許一個(gè)事務(wù)訪問(wèn)該表。

??雖然Repeatable read避免了不可重復(fù)讀,但還有可能出現(xiàn)幻讀 。

??比如singo的老婆工作在銀行部門,她時(shí)常通過(guò)銀行內(nèi)部系統(tǒng)查看singo的信用卡消費(fèi)記錄。有一天,她正在查詢到singo當(dāng)月信用卡的總消費(fèi)金額 (select sum(amount) from transaction where month = 本月)為80元,而singo此時(shí)正好在外面胡吃海塞后在收銀臺(tái)買單,消費(fèi)1000元,即新增了一條1000元的消費(fèi)記錄(insert transaction … ),并提交了事務(wù),隨后singo的老婆將singo當(dāng)月信用卡消費(fèi)的明細(xì)打印到A4紙上,卻發(fā)現(xiàn)消費(fèi)總額為1080元,singo的老婆很詫異,以為出 現(xiàn)了幻覺,幻讀就這樣產(chǎn)生了。

??注:Mysql的默認(rèn)隔離級(jí)別就是Repeatable read。


2.4 Serializable(序列化)
?Serializable(序列化)是最高的事務(wù)隔離級(jí)別,同時(shí)代價(jià)也花費(fèi)最高,性能很低,一般很少使用,在該級(jí)別下,事務(wù)順序執(zhí)行,不僅可以避免臟讀、不可重復(fù)讀,還避免了幻讀。


三、總結(jié)

3.1 隔離級(jí)別與對(duì)應(yīng)可能產(chǎn)生的問(wèn)題表

隔離級(jí)別臟讀(Dirty read)不可重復(fù)讀(NonRepeatable Read)幻讀(Phantom Read)
讀未提交(Read uncommitted)可能可能可能
讀已提交(Read committed)不可能可能可能
可重復(fù)讀(Repeatable read)不可能不可能可能
序列化(Serializable)不可能不可能不可能

感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)mysql數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別及臟讀、不可重復(fù)讀、幻讀是什么大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站標(biāo)題:mysql數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別及臟讀、不可重復(fù)讀、幻讀是什么
文章網(wǎng)址:http://fisionsoft.com.cn/article/gcjipe.html