- 事務是一組邏輯相關的操作,它包含一組任務。
- 事務是一個動作或一系列動作,它由單個用戶執行以執行訪問資料庫內容的操作。
示例: 假設銀行員工從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)
事務操作:
以下是交易的主要操作:
- 讀(X):讀操作用於從資料庫中讀取X 的值並將其存儲在主記憶體的緩衝區中。
- 寫(X):寫操作用於將值從緩衝區寫回資料庫。
舉一個例子來從一個帳戶中扣除交易,該帳戶包含以下操作:
第1步. R(X); // 讀取
第2步. X = X - 500; // 扣除操作
第3步. W(X); // 更改寫入
假設在開始交易之前X的值是4000
。
- 第一個操作從資料庫中讀取X的值並將其存儲在緩衝區中。
- 第二個操作將X的值減少
500
,因此緩衝區將包含3500
。 - 第三個操作將緩衝區的值寫入資料庫。 所以
X
的最終值將是3500
。
但有可能由於硬體,軟體或電源等的故障,交易可能在完成集合中的所有操作之前失敗。
例如:如果在上述交易中,借方交易在執行操作的第2步後失敗,那麼X
的值將在資料庫中保持為4000
,這是銀行無法接受的。
要解決這個問題,有兩個重要的操作:
提交 :用於永久保存工作。
回滾 :用於撤銷已完成的工作。