真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

數(shù)據(jù)庫(kù)事務(wù)的四大特性和隔離級(jí)別

數(shù)據(jù)庫(kù)事務(wù)(Database Transaction) ,是指作為單個(gè)邏輯工作單元執(zhí)行的一系列操作,要么全部執(zhí)行,要么全部都不執(zhí)行。

成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的合水網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

一個(gè)邏輯工作單元要成為事務(wù),必須滿足事務(wù)的四大特性(ACID)。即原子性(Atomic)、一致性(Consistent)、隔離性(Insulation)和持久性(Duraction)。

原子性(Atomic):事務(wù)是一個(gè)完整的操作,事務(wù)的各個(gè)操作步驟是不可分的。即要么都執(zhí)行,要么都不執(zhí)行。

一致性(Consistent):事務(wù)執(zhí)行的結(jié)果必須使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。

隔離性(Insulation):系統(tǒng)必須保證事務(wù)不受其他并發(fā)執(zhí)行事務(wù)的影響。對(duì)任何一對(duì)事務(wù)T1和T2,在T1看來,T2要么在T1開始之前已經(jīng)結(jié)束,要么在T1完成之后再開始執(zhí)行。隔離通過并發(fā)控制機(jī)制實(shí)現(xiàn)。

持久性(Duraction):事務(wù)一旦提交到數(shù)據(jù)庫(kù),它對(duì)數(shù)據(jù)庫(kù)的更新不再受后續(xù)操作或故障的影響。

如果我們不考慮事務(wù)的隔離性,將會(huì)造成以下情況發(fā)生:

1、臟讀

臟讀是指一個(gè)事務(wù)處理過程中讀取了另一個(gè)未提交事務(wù)的數(shù)據(jù)。

2、不可重復(fù)讀

不可重復(fù)讀是指在對(duì)數(shù)據(jù)庫(kù)中的某個(gè)數(shù)據(jù),一個(gè)事務(wù)多次讀取卻返回不一樣的結(jié)果。這是由于在查詢的時(shí)候,被另一個(gè)事務(wù)修改提交了。

3、幻讀

幻讀是事務(wù)非獨(dú)立執(zhí)行時(shí)發(fā)生的一種現(xiàn)象。例如事務(wù)T1對(duì)一個(gè)表中的所有行的某個(gè)數(shù)據(jù)從“Y”修改成“N”,此時(shí)事務(wù)T2正在向數(shù)據(jù)庫(kù)插入一條記錄,數(shù)值是“Y”。然后操作事務(wù)T1的用戶再次查看剛剛修改的數(shù)據(jù)后,會(huì)發(fā)現(xiàn)還是有一個(gè)數(shù)值為“Y”的數(shù)據(jù)記錄。其實(shí)是事務(wù)T2添加的數(shù)據(jù),這就產(chǎn)生了幻讀。

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


臟讀
不可重復(fù)讀
幻讀
Read uncommitted
Y
Y
Y

Read committed

N
Y
Y
Repeatable read
N
N
Y
Serializable
N
N
N

Read uncommitted(讀未提交)

例如:A向B轉(zhuǎn)賬5000元,但是A剛開始轉(zhuǎn)了8000給B賬戶,但是還沒有提交事務(wù)。然后現(xiàn)在B去賬戶里面查多了8000,A后面發(fā)現(xiàn)多轉(zhuǎn)了,于是就重新回滾事務(wù)轉(zhuǎn)了5000給B賬號(hào),等B下次再去查看的時(shí)候發(fā)現(xiàn)是5000,這就產(chǎn)生了臟讀。

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)上述情況,即我們所說的不可重復(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ù)讀。

Repeatable read (重復(fù)讀)

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

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

singo的老婆工作在銀行部門,她時(shí)常通過銀行內(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)生了。

Serializable (序列化)

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




名稱欄目:數(shù)據(jù)庫(kù)事務(wù)的四大特性和隔離級(jí)別
瀏覽路徑:http://weahome.cn/article/gspcpi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部