事務必須服從acid原則。
acid指的是
1.原子性(atomicity)
2.一致性(consistency)
3.隔離性(isolation)
4.永續性(durability)
理解為,事務其實就是一系列指令的集合。
在許多事務處理同乙個資料時,如果沒有採取有效的隔離機制,那麼併發處理資料時,會帶來一些的問題。
(1)第一類丟失更新:撤銷乙個事務時,把其他事務已提交的更新資料覆蓋。
小明去銀行櫃檯存錢,他的賬戶裡原來的餘額為100元,現在打算存入100元。在他存錢的過程中,
銀行年費扣了5元,餘額只剩95元。突然他又想著這100元要用來請女朋友看電影吃飯,不打算存了。
在他撤回存錢操作後,餘額依然為他存錢之前的100元。所以那5塊錢到底扣了誰的?
(2)髒讀:乙個事務讀取到另乙個事務未提交的更新資料。
小明的銀行卡餘額裡有100元。現在他打算用手機點乙個外賣飲料,需要付款10元。但是這個時候,
他的女朋友看中了一件衣服95元,她正在使用小明的銀行卡付款。於是小明在付款的時候,
程式後台讀取到他的餘額只有5塊錢了,根本不夠10元,所以系統拒絕了他的交易,
告訴餘額不足。但是小明的女朋友最後因為密碼錯誤,無法進行交易。小明非常鬱悶,
明明銀行卡裡還有100元,怎麼會餘額不足呢?(他女朋友更鬱悶。。。)
(3)幻讀也叫虛讀:乙個事務執行兩次查詢,第二次結果集包含第一次中沒有或某些行已經
被刪除的資料,造成兩次結果不一致,只是另乙個事務在這兩次查詢中間插入或刪除了資料造成的。
公司財務a在進行員工薪資核算業務,需要對小明的工資進行計算並錄入系統,必須查詢兩次明細資訊,
然後將後一次的明細資訊計算總數出來。財務在第一次明細查詢時,基本工資2000元,全勤獎1000元,
提成2000元,共計5000元。在進行第二次計算時,財務b突然接到通知,需要把下個月的節日福利也
在這個月的工資中發放,每人100元。於是財務b在每個人的工資明細中又加了一條節日福利100元。
而此時財務a獲得第二次查詢小明的工資明細後,發現工資明細變成了4條資料,總數是5100元。
兩次計算結果相差100元,財務a奇怪這多出來的一條明細100元是**來的呢?(都怪財務b不告訴a。。。)
(4)不可重複讀:乙個事務兩次讀取同一行的資料,結果得到不同狀態的結果,中間正好另乙個事務更新
了該資料,兩次結果相異,不可被信任。
小明在手機上購買起購價為1w元理財產品。系統首先要判斷他的餘額夠不夠購買理財產品,如果足夠再獲
取當前的餘額,進行申請。系統第一次讀取到小明的餘額還剩1w元,剛好足夠購買產品。但是這個時候剛好
他女朋友又看中了乙個包包5000元,這次密碼終於不會再錯誤的女朋友毫不猶豫刷了小明的銀行卡買下了這
個包包。但是這個系統剛好在進行第二次確認,發現小明的餘額上只有5000元,
根本不夠購買。於是系統很生氣,拒絕了小明的購買行為,告訴他,你真是個**!!!
(5)第二類丟失更新:是不可重複讀的特殊情況。如果兩個事物都讀取同一行,然後兩個都進行寫操作,
並提交,第乙個事物所做的改變就會丟失。
小明和女朋友一起去逛街。女朋友看中了一支口紅,(對,女朋友就是用來表現買買買的)小明大方的掏出
了自己的銀行卡,告訴女朋友:親愛的,隨便刷,隨便買,我坐著等你。然後小明就坐在**座椅上玩手機,
等著女朋友。這個時候,程式設計師的聊天群裡有人推薦了一本書,小明一看,哎呀,真是本好書,還是限量發行呢,
我一定更要買到。於是小明趕緊找到購買渠道,進行付款操作。而同時,小明的女朋友也在不亦樂乎的買買買,
他們同時進行了一筆交易操作,但是這個時候銀行系統出了問題,當他們都付款成功後,
卻發現,銀行只扣了小明的買書錢,卻沒有扣去女朋友此時交易的錢。哈哈哈,小明真是太開心了!
Spring事務管理 事務的傳播行為
1 簡介 當事務方法被另乙個事務方法呼叫時,必須指定事務應該如何傳播。例如 方法可能繼續在現有事務中執行,也可能開啟乙個新事務,並在自己的事務中執行。事務的傳播行為可以由傳播屬性指定。spring定義了 7種類傳播行為。如下圖所示 2 傳播屬性的定義 事務的傳播屬性可以再 transactional...
Spring 事務機制原理 事務管理 API
spring的事務管理機制實現的原理,是通過動態 對所有需要事務管理的bean進行載入,並根據配置在invoke方法中對當前呼叫的 方法名進行判定,並在method.invoke方法前後為其加上合適的事務管理 這樣就實現了spring式的事務管理。spring中的aop實現更為複雜和靈活,不過基本原...
理解Spring事務管理
理解事務之前,先講乙個你日常生活中最常幹的事 取錢。比如你去atm機取1000塊錢,大體有兩個步驟 首先輸入密碼金額,銀行卡扣掉1000元錢 然後atm出1000元錢。這兩個步驟必須是要麼都執行要麼都不執行。如果銀行卡扣除了1000塊但是atm出錢失敗的話,你將會損失1000元 如果銀行卡扣錢失敗但...