事務(wù)特性 ACID
-
原子性 (atomicity)
原子(atom)指化學(xué)反應(yīng)不可再分的基本微粒,原子在化學(xué)反應(yīng)中不可分割。
這里形容事務(wù)是一個(gè)整體不可再分和媳,整體要么都成功要么都失敗砚婆。 -
一致性 (consistency)
事務(wù)執(zhí)行前后罩抗,數(shù)據(jù)應(yīng)保持一致滨嘱。
可以借助轉(zhuǎn)賬場(chǎng)景理解:轉(zhuǎn)賬前后峰鄙,雙方總錢(qián)數(shù)不會(huì)發(fā)生改變。 -
隔離性 (isolation)
執(zhí)行過(guò)程中的事務(wù)之間互不可見(jiàn)太雨,互不影響吟榴。
不同標(biāo)準(zhǔn)的隔離級(jí)別詳見(jiàn)下方隔離級(jí)別 -
持久性 (durability)
事務(wù)成功提交后造成的影響是永久的,不可回滾囊扳。
隔離級(jí)別
隔離級(jí)別是不同事務(wù)執(zhí)行過(guò)程中吩翻,相互之間的可見(jiàn)性
目前有四個(gè)隔離級(jí)別標(biāo)準(zhǔn),分別是:
-
讀未提交 (Read Uncommited)
最低隔離級(jí)別锥咸,未提交的事務(wù)所作修改能被其他執(zhí)行中的事務(wù)可見(jiàn)狭瞎,破壞了隔離性。此級(jí)別會(huì)造成臟讀臟讀:臟讀又稱無(wú)效數(shù)據(jù)的讀出搏予,是指在數(shù)據(jù)庫(kù)訪問(wèn)中熊锭,事務(wù)T1將某一值修改,然后事務(wù)T2讀取該值雪侥,此后T1因?yàn)槟撤N原因撤銷(xiāo)對(duì)該值的修改碗殷,這就導(dǎo)致了T2所讀取到的數(shù)據(jù)是無(wú)效的,值得注意的是速缨,臟讀一般是針對(duì)于update操作的锌妻。
一種更易理解的說(shuō)法是:臟讀就是指當(dāng)一個(gè)事務(wù)正在訪問(wèn)數(shù)據(jù),并且對(duì)數(shù)據(jù)進(jìn)行了修改旬牲,而這種修改還沒(méi)有提交到數(shù)據(jù)庫(kù)中仿粹,這時(shí),另外一個(gè)事務(wù)也訪問(wèn)這個(gè)數(shù)據(jù)原茅,然后使用了這個(gè)數(shù)據(jù)吭历。因?yàn)檫@個(gè)數(shù)據(jù)是還沒(méi)有提交的數(shù)據(jù),那么另外一個(gè)事務(wù)讀到的這個(gè)數(shù)據(jù)是臟數(shù)據(jù)擂橘,依據(jù)臟數(shù)據(jù)所做的操作可能是不正確的毒涧。
-
讀已提交 (Read Commited)
是Oracle的默認(rèn)隔離級(jí)別,已提交的事務(wù)所作修改能被其他執(zhí)行中的事務(wù)可見(jiàn)贝室,破壞了一致性。此級(jí)別會(huì)造成不可重復(fù)讀不可重復(fù)讀:是指在數(shù)據(jù)庫(kù)訪問(wèn)中仿吞,一個(gè)事務(wù)范圍內(nèi)兩個(gè)相同的查詢卻返回了不同數(shù)據(jù)滑频。這是由于查詢時(shí)系統(tǒng)中其他事務(wù)修改的提交而引起的。比如事務(wù)T1讀取某一數(shù)據(jù)唤冈,事務(wù)T2讀取并修改了該數(shù)據(jù)峡迷,T1為了對(duì)讀取值進(jìn)行檢驗(yàn)而再次讀取該數(shù)據(jù),便得到了不同的結(jié)果。
一種更易理解的說(shuō)法是:在一個(gè)事務(wù)內(nèi)讶坯,多次讀同一個(gè)數(shù)據(jù)晌纫。在這個(gè)事務(wù)還沒(méi)有結(jié)束時(shí)肃叶,另一個(gè)事務(wù)也訪問(wèn)該同一數(shù)據(jù)并修改數(shù)據(jù)。那么琉预,在第一個(gè)事務(wù)的兩次讀數(shù)據(jù)之間。由于另一個(gè)事務(wù)的修改蒿褂,那么第一個(gè)事務(wù)兩次讀到的數(shù)據(jù)可能不一樣圆米,這樣就發(fā)生了在一個(gè)事務(wù)內(nèi)兩次讀到的數(shù)據(jù)是不一樣的,因此稱為不可重復(fù)讀啄栓,即原始讀取不可重復(fù)娄帖。 -
可重復(fù)讀 (Repeatable Read)
MySQL的默認(rèn)隔離級(jí)別,事務(wù)執(zhí)行過(guò)程中昙楚,查詢到的數(shù)據(jù)保證一致近速,即已提交的事務(wù)所作修改不能被其他執(zhí)行中的事務(wù)可見(jiàn)。但對(duì)于insert的數(shù)據(jù)無(wú)效堪旧,因此會(huì)造成幻讀 削葱,事務(wù)提交前后多了數(shù)據(jù),就像出現(xiàn)了“幻覺(jué)”幻讀是指當(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ù)”。那么螃宙,以后就會(huì)發(fā)生操作第一個(gè)事務(wù)的用戶發(fā)現(xiàn)表中還存在沒(méi)有修改的數(shù)據(jù)行蛮瞄,就好象發(fā)生了幻覺(jué)一樣.一般解決幻讀的方法是增加范圍鎖RangeS,鎖定檢索范圍為只讀谆扎,這樣就避免了幻讀挂捅。
串行化 (serializable)
最高級(jí)別,事務(wù)之間完全串行化執(zhí)行(慢慢排隊(duì)執(zhí)行吧~)堂湖,毫無(wú)并發(fā)可言闲先,因此性能較低!但可避免幻讀現(xiàn)象
下方貼圖一張无蜂,較為形象的表達(dá)了不同隔離級(jí)別解決的問(wèn)題:
本文供個(gè)人理解使用伺糠,如有失誤歡迎指出~!感謝