範例: 假設銀行員工從X
的帳戶向Y
的帳戶轉賬800
元,這個小事務包含幾個低階任務:
X 的帳戶
Open_Account(X)
Old_Balance = X.balance
New_Balance = Old_Balance - 800
X.balance = New_Balance
Close_Account(X)
Y 的帳戶
Open_Account(Y)
Old_Balance = Y.balance
New_Balance = Old_Balance + 800
Y.balance = New_Balance
Close_Account(Y)
事務操作:
以下是交易的主要操作:
舉一個例子來從一個帳戶中扣除交易,該帳戶包含以下操作:
第1步. R(X); // 讀取
第2步. X = X - 500; // 扣除操作
第3步. W(X); // 更改寫入
假設在開始交易之前X的值是4000
。
500
,因此緩衝區將包含3500
。X
的最終值將是3500
。但有可能由於硬體,軟體或電源等的故障,交易可能在完成集合中的所有操作之前失敗。
例如:如果在上述交易中,藉方交易在執行操作的第2步後失敗,那麼X
的值將在資料庫中保持為4000
,這是銀行無法接受的。
要解決這個問題,有兩個重要的操作:
提交 :用於永久儲存工作。
回滾 :用於撤消已完成的工作。