DBMS事務


  • 事務是一組邏輯相關的操作,它包含一組任務。
  • 事務是一個動作或一系列動作,它由單個使用者執行以執行存取資料庫內容的操作。

範例: 假設銀行員工從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,這是銀行無法接受的。

要解決這個問題,有兩個重要的操作:

提交 :用於永久儲存工作。
回滾 :用於撤消已完成的工作。