事務經(jīng)典案例:
張三要給李四轉(zhuǎn)賬涉馁,這里涉及到兩個操作,從張三的賬戶上減去500塊錢峭火,給李四的賬戶上增加500塊錢毁习。這兩個操作要么同時成功,要么同時失敗卖丸,如何確保它們同時成功或失敺那摇?答案就是事務稍浆。
事務具有四個特性:
1. 原子性(Atomicity)
一個事務中的所有操作载碌,要么全部完成,要么全部都不完成衅枫,不會結(jié)束在中間的某個環(huán)節(jié)嫁艇。事務在執(zhí)行過程中發(fā)生錯誤,會被回滾到事務開始前的狀態(tài)弦撩,就像這個事務從沒執(zhí)行過一樣步咪。即,事務不可分割益楼、不可約簡猾漫。
2. 一致性(Consistency)
在事務開始之前和事務結(jié)束以后,數(shù)據(jù)庫的完整性沒有被破壞感凤,這表示寫入的資料必須完全符合所有的預設約束悯周、觸發(fā)器、級聯(lián)回滾等俊扭。
3.?隔離性(Isolation)
數(shù)據(jù)庫允許多個并發(fā)事務同時對其數(shù)據(jù)進行讀寫和修改队橙,隔離性可以防止多個事務并發(fā)執(zhí)行時優(yōu)于交叉執(zhí)行而導致數(shù)據(jù)的不一致鹊奖。
事務隔離級別:
? ? a.未提交讀(Read Uncommitted)
????b.提交讀(Read Committed)
????c.可重復讀(Repeatable Read)
????d.串行化(Serializable)
可能導致問題:
? ? 臟讀:A事務讀取B事務尚未提交的數(shù)據(jù)琳拨,此時如果B事務發(fā)生錯誤并執(zhí)行回滾操作,那么A事務讀取到的數(shù)據(jù)就是臟數(shù)據(jù)。
? ? 不可重復讀:事務A在執(zhí)行讀取操作织咧,由整個事務A比較大硬霍,前后讀取同一條數(shù)據(jù)需要經(jīng)歷很長的時間 宇葱。而在事務A第一次讀取數(shù)據(jù)勺良,比如此時讀取了小明的年齡為20歲,事務B執(zhí)行更改操作花枫,將小明的年齡更改為30歲刻盐,此時事務A第二次讀取到小明的年齡時,發(fā)現(xiàn)其年齡是30歲劳翰,和之前的數(shù)據(jù)不一樣了敦锌,也就是數(shù)據(jù)不重復了,系統(tǒng)不可以讀取到重復的數(shù)據(jù)佳簸,成為不可重復讀乙墙。
? ? 幻讀:事務A在執(zhí)行讀取操作,需要兩次統(tǒng)計數(shù)據(jù)的總量生均,前一次查詢數(shù)據(jù)總量后听想,此時事務B執(zhí)行了新增數(shù)據(jù)的操作并提交后,這個時候事務A讀取的數(shù)據(jù)總量和之前統(tǒng)計的不一樣马胧,就像產(chǎn)生了幻覺一樣汉买,平白無故的多了幾條數(shù)據(jù),成為幻讀佩脊。
4. 持久性(Durability)
事務處理結(jié)束后蛙粘,對數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會丟失威彰。
參考文章鏈接:https://blog.csdn.net/weixin_42440637/article/details/113530994