2009年3月17日 星期二

Transaction 的四個特性

在資料庫的系統中,當有更改資料庫內容時,都會以 Transaction 作為處理單位。那麼一個 Transaction 究竟涵蓋的範圍是如何設定出來的,答案很簡單,只要是一連串的 SQL 都必須正常執行完成,才可以算是做完一件事情,這整個過程就是一個 Transaction,如果中途任何一個步驟失敗,資料的異動狀態必須回復到 Transaction 還沒有執行前的狀態才可以。例如:要完成一個提款機提款的動作,至少會有兩個動作要完成,一個是從銀行的帳戶中扣款,另一個是提款機要正常吐鈔,只要有一 個動作不能正常執行,就屬於無效的提款動作。

要維持資料庫系統的一致性與正確性,其中的關鍵就在於 Transaction 可以正確的被處理,如果中間的任何一個步驟執行失敗也可以回復到 Transaction 還沒有執行前的狀態,因此 Transaction 包含了重要的四個特性:

  1. Atomicity

      Transaction 必須看成一個不可分割的完整個體,此一特性就稱為 Atomicity。也就是說 Transaction 的執行狀況必須是全部做完,或者是全部不作。

      所以當 Transaction 正常執行完成時,會利用 Commit 指令告訴資料庫系統 Transaction 已正常執行完成,反之會以 Rollback 指令告訴資料庫系統 Transaction 執行失敗,必須回復到 Transaction 還沒有執行前的狀態。

  2. Concurrency

      資料庫系統可以同時處理一個以上的 Transaction,否則一次只能處理一個 Transaction 的話,使用者就必須在不斷的等待中度過了。

  3. Isolation

      雖然資料庫系統可以同時處理一個以上的 Transaction,但是當 Transaction 尚未處理完成時 ( 不論是 Commit 或 Rollback ),異動的資料是不可以被其他的 Transaction 讀取的,以避免當該 Transaction 尚未處理完成時資料的不確定性,造成其他 Transaction 的不正確處理。

  4. Durability

      當 Transaction 正成執行完成後,資料庫系統會接收到 Commit 指令,這個時候就必須將 Transaction 的資料異動內容忠實的保存在資料庫中,以後就算是資料庫系統發生錯誤時, 以必須儘可能將資料復原。

上述為 Transaction 的四個特性。

本則專題由飛達客工作室提供