關(guān)于事務(wù)囊颅、事務(wù)的隔離級(jí)別以及對(duì)臟讀当悔、不可重復(fù)讀、幻讀的理解

什么是事務(wù)踢代?
??事務(wù)盲憎,即數(shù)據(jù)庫事務(wù)。是數(shù)據(jù)庫管理系統(tǒng)執(zhí)行過程中的一個(gè)邏輯單位奸鬓,由一個(gè)有限的數(shù)據(jù)庫操作序列構(gòu)成焙畔。
??通常掸读,事務(wù)的正確執(zhí)行會(huì)使數(shù)據(jù)庫從一種狀態(tài)轉(zhuǎn)換為另一種狀態(tài)串远。
事務(wù)的特性(ACID原則)

原子性(atomicity) 即不可分割性,事務(wù)要么全執(zhí)行儿惫、要么全不執(zhí)行澡罚。
一致性(consistency) 事務(wù)的執(zhí)行使得數(shù)據(jù)庫從一種正確狀態(tài)轉(zhuǎn)換成另外一種正確狀態(tài)。
隔離性(isolation) 在事務(wù)正確提交之前肾请,不允許把事務(wù)對(duì)該數(shù)據(jù)的改變提供給任何其他事務(wù)留搔。
持久性(durability) 事務(wù)正確提交之后,其結(jié)果將永遠(yuǎn)保存在數(shù)據(jù)庫之中铛铁。

并發(fā)狀態(tài)下事務(wù)會(huì)產(chǎn)生的問題
??并發(fā)狀態(tài)解釋為當(dāng)事務(wù)A和事務(wù)B對(duì)同一資源進(jìn)行操作時(shí)隔显,可能會(huì)遇到很多的問題。
臟讀(針對(duì)未提交數(shù)據(jù))
??即事務(wù)A讀到了事務(wù)B還沒有提交的數(shù)據(jù)饵逐。如果事務(wù)A對(duì)數(shù)據(jù)進(jìn)行了更新括眠,但是事務(wù)A并沒有提交,但是事務(wù)B這個(gè)時(shí)候看到了事務(wù)A沒有提交的更新倍权。當(dāng)事務(wù)A進(jìn)行了回滾掷豺,那么剛剛事務(wù)B看到的數(shù)據(jù)就是臟數(shù)據(jù)。也就是臟讀薄声。
??例子:
??A 給 B 轉(zhuǎn)了100萬当船,但是 A 還沒有提交,此時(shí) B 查詢自己賬戶默辨,多了100萬德频。然后 A 發(fā)現(xiàn)轉(zhuǎn)錯(cuò)人了,回滾了事物缩幸。然后 B 100萬就沒了壹置。在這個(gè)過程中 B 查到了沒有提交的數(shù)據(jù)(多出的100萬)档叔,這就是臟讀。
不可重復(fù)讀(在一個(gè)事務(wù)里面讀取了兩次某個(gè)數(shù)據(jù)蒸绩,讀出來的數(shù)據(jù)不一致衙四,針對(duì)修改操作)
即同一事務(wù)在事務(wù)執(zhí)行過程中對(duì)同一個(gè)數(shù)據(jù)進(jìn)行了多次讀取,但是每一次讀取的數(shù)據(jù)結(jié)果都不相同患亿。原因是在兩次讀取間隔传蹈,數(shù)據(jù)別其他人修改了,導(dǎo)致了統(tǒng)一事務(wù)兩次讀取結(jié)果不一致步藕。
??例子:
A 查詢銀行余額為100萬惦界,B 這個(gè)時(shí)候取走了50萬,此時(shí)余額變成了50萬咙冗,A 再一次查詢余額基矮,變成了50萬。對(duì) A 而言兩次結(jié)果不一致就是不可重復(fù)讀伦腐。
幻讀(在一個(gè)事務(wù)里面的操作中發(fā)現(xiàn)了未被操作的數(shù)據(jù)泄伪,針對(duì)增刪操作)
即在事務(wù) A 多次讀取數(shù)據(jù)集的過程中中,事務(wù) B 對(duì)數(shù)據(jù)進(jìn)行了新增操作或者刪除操作立润,導(dǎo)致事務(wù) A 多次讀取的數(shù)據(jù)集不一致狂窑。
??例子:
A 修改當(dāng)前公司所有職員信息的時(shí)候,B 向其中插入了一個(gè)新的職員桑腮,這個(gè)時(shí)候 A 提交的時(shí)候發(fā)現(xiàn)了一個(gè)自己沒有修改過的職員的信息泉哈,對(duì) A 而言就像是產(chǎn)生了幻覺。
事務(wù)的隔離級(jí)別
為了應(yīng)對(duì)上面并發(fā)情況下出現(xiàn)的問題破讨,事務(wù)的隔離級(jí)別就產(chǎn)生了丛晦。當(dāng)事務(wù)的隔離級(jí)別越高的時(shí)候,上面的問題就會(huì)越少提陶,但是性能消耗也會(huì)越大烫沙。所以在實(shí)際生產(chǎn)過程中,要根據(jù)需求去確定隔離級(jí)別搁骑。

四種隔離級(jí)

READ_UNCOMMITTED

讀未提交斧吐,即能夠讀取到?jīng)]有被提交的數(shù)據(jù),所以很明顯這個(gè)級(jí)別的隔離機(jī)制無法解決臟讀仲器、不可重復(fù)讀煤率、幻讀中的任何一種。

READ_COMMITED

已提交乏冀,即能夠讀到那些已經(jīng)提交的數(shù)據(jù)蝶糯,能夠防止臟讀,但是無法解決不可重復(fù)讀和幻讀的問題辆沦。

REPEATABLE_READ

重復(fù)讀取昼捍,即在數(shù)據(jù)讀出來之后加鎖识虚,類似"select * from XXX for update",明確數(shù)據(jù)讀取出來就是為了更新用的妒茬,所以要加一把鎖担锤,防止別人修改它。REPEATABLE_READ的意思也類似乍钻,讀取了一條數(shù)據(jù)肛循,這個(gè)事務(wù)不結(jié)束,別的事務(wù)就不可以改這條記錄银择,這樣就解決了臟讀多糠、不可重復(fù)讀的問題,但是幻讀的問題還是無法解決浩考。

SERLALIZABLE

串行化夹孔,最高的事務(wù)隔離級(jí)別,不管多少事務(wù)析孽,挨個(gè)運(yùn)行完一個(gè)事務(wù)的所有子事務(wù)之后才可以執(zhí)行另外一個(gè)事務(wù)里面的所有子事務(wù)搭伤,這樣就解決了臟讀、不可重復(fù)讀和幻讀的問題了绿淋。

歡迎工作一到五年的Java工程師朋友們加入JavaQQ群:219571750闷畸,群內(nèi)提供免費(fèi)的Java架構(gòu)學(xué)習(xí)資料(里面有高可用尝盼、高并發(fā)吞滞、高性能及分布式、Jvm性能調(diào)優(yōu)盾沫、Spring源碼裁赠,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個(gè)知識(shí)點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時(shí)間來學(xué)習(xí)提升自己赴精,不要再用"沒有時(shí)間“來掩飾自己思想上的懶惰佩捞!趁年輕,使勁拼蕾哟,給未來的自己一個(gè)交代一忱!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谭确,隨后出現(xiàn)的幾起案子帘营,更是在濱河造成了極大的恐慌,老刑警劉巖逐哈,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芬迄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡昂秃,警方通過查閱死者的電腦和手機(jī)禀梳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門杜窄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人算途,你說我怎么就攤上這事塞耕。” “怎么了嘴瓤?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵荷科,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我纱注,道長(zhǎng)畏浆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任狞贱,我火速辦了婚禮刻获,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瞎嬉。我一直安慰自己蝎毡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布氧枣。 她就那樣靜靜地躺著沐兵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪便监。 梳的紋絲不亂的頭發(fā)上扎谎,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音烧董,去河邊找鬼毁靶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛逊移,可吹牛的內(nèi)容都是我干的预吆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼胳泉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼拐叉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扇商,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤凤瘦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后钳吟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體廷粒,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坝茎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涤姊。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嗤放,靈堂內(nèi)的尸體忽然破棺而出思喊,到底是詐尸還是另有隱情,我是刑警寧澤次酌,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布恨课,位于F島的核電站,受9級(jí)特大地震影響岳服,放射性物質(zhì)發(fā)生泄漏剂公。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一吊宋、第九天 我趴在偏房一處隱蔽的房頂上張望纲辽。 院中可真熱鬧,春花似錦璃搜、人聲如沸拖吼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吊档。三九已至,卻和暖如春唾糯,著一層夾襖步出監(jiān)牢的瞬間怠硼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工趾断, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拒名,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓芋酌,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親雁佳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子脐帝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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