1. 程式人生 > >(一)資料庫事務-事務的特性

(一)資料庫事務-事務的特性

       在移動網際網路時代,有事沒事給朋友發個紅包很正常吧。假設今天是情人節,你為了討女朋友歡心,打算給她發個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