(一)資料庫事務-事務的特性
在移動網際網路時代,有事沒事給朋友發個紅包很正常吧。假設今天是情人節,你為了討女朋友歡心,打算給她發個520元的小紅包。你激動的發完紅包,放佛看到了女朋友滿臉的喜悅和對你的愛慕。但是過了好久,你女朋友好久沒有任何回覆,你期盼的“麼麼達”沒有出現。心急的你看了下自己的手機錢包,發現520元確實已經從賬戶扣除。這時你會不會擔心,這520元從自己的賬戶上扣除了,但是沒有到達女朋友的賬戶。
可能你的擔心不止這些,在你給女朋友發紅包的時候,老闆覺得你這個月幹得漂亮,給你發了個大紅包,這時候若發女朋友的紅包退回來,會不把老闆發的紅包金額給忽略掉。
你的這些擔心是否多餘呢?
一.概念
其實資料庫事務
給女朋友發紅包,簡單的看可以包含兩個操作:a.從你的賬戶上扣除520元。b.給女朋友的賬戶加520元.
二.目的
資料庫事務的目的,恰恰是為了解決你的擔心。
1.提供了可靠的執行單元以從災難恢復中保持資料的一致性。在系統發生異常執行終止,許多操作未完成或者執行完成狀態不清楚時,能夠從失敗中正確恢復資料,以保持資料庫的一致性。
2.能夠在併發的兩個程式間提供隔離。如果沒有提供隔離,最終程式的輸出結果可能是錯誤的。
三.事務的特性(ACID)
事務提出了“All-Or-Nothing”
而且,每個事務之間應該是隔離的,最終執行結果應該保持資料之間的一致。最終成功的執行結果能夠永久儲存。
1.原子性(Atomic)
事務必須是原子工作單元,對於其資料修改,要麼全部執行,要麼全部不執行。比如在給女朋友發紅包的過程中,從你賬戶上扣除520元的操作已經執行了,女朋友賬戶上增加520元的操作還沒有執行,這時候系統突然出現故障停機。那麼在系統重啟恢復資料的時候,這次發紅包的所有操作都必須回滾。從你賬戶扣除的520元必須回到你的賬戶上(所以你的擔心有點多餘)
2.一致性 (Consistence)
一致性保證了每次事務都從一個合法的狀態到另一個合法的狀態,所有寫入資料庫的資料都必須合法。所謂的合法是指程式級別定義的規則,包括各種約束、觸發,
3.隔離性(isolation)
為了說明隔離性,我們假定兩個事務在同一時間嘗試修改相同的資料,其中的一個事務必須等另一個事務執行完之後才能執行。
比如發紅包例子中,T1:你發520元紅包給女朋友,T2:老闆發10000元給你,包含四個操作
1.T1你的賬戶扣去520元
2. T1女朋友的賬戶加上520元
3.T2老闆的賬戶扣去10000元
4.T2 你的賬戶加上10000元
如果這些操作是按以上順序執行,隔離性當然沒被破壞。如果事務交叉執行,實際的執行順序是1,3,4,2。那麼會發生什麼了,如果T1你給女朋友轉賬失敗了,T2已經給你的賬戶加了10000元,那麼因為隔離性,T2的執行結果在T1回滾退出之前,都不會真實發生。只有當你發女朋友的紅包退還到你的賬戶時,老闆發你的錢才能真正到帳
4.永續性(durability)
事務一旦提交,在事務中對資料進行修改也就進行持久話儲存類,不會因為系統故障導致提交後的資料丟失。
四.事務的操作模型
BEGINTRANSACTION
IF(OOERR)
ROLLBACKTRANSACTION;
ELSE
COMMITTRANSACTION
概念翻譯:
資料庫事務:Databasetransaction
原子性:atomic
一致性:consistent
隔離性:isolated
永續性:durable
提交:commit
未提交:uncommit
回滾:rollback