交易是一種作為單一原子操作完成的工作單元,也就是說,整體操作成功或失敗。 舉例來說,考慮將錢從一個銀行帳戶轉到另一個。 這包含兩個步驟:從第一個帳戶提領資金,並存入第二個帳戶。 這兩個步驟都必須成功;一方成功而另一方失敗,是不可接受的。 一個支援交易的資料庫能保證這一點。
交易可以通過被 提交 或被 回滾來完成。 當交易被提交時,該交易中所做的變更即成為永久性變更。 當交易被復原時,受影響的資料列會恢復到交易開始前的狀態。 以帳戶轉移為例,應用程式執行一個 SQL 語句來扣除第一個帳戶的款項,另一個 SQL 語句則用來存入第二個帳戶的款項。 若兩個語句皆成功,應用程式接著提交該交易。 但如果任一語句因任何原因失敗,應用程式會回滾交易。 無論哪種情況,應用程式都能保證交易結束時的狀態一致。
單一交易可以包含多個在不同時間發生的資料庫操作。 若其他交易能完全取得中間結果,交易間可能會相互干擾。 例如,假設一筆交易插入一列,第二筆交易讀取該列,然後回復第一筆交易。 第二筆交易中現在包含一個不存在的資料列的數據。
為了解決這個問題,有各種方案可以將交易彼此隔離。 交易隔離 通常透過鎖定列來實現,這會防止多筆交易同時使用同一列。 在某些資料庫中,鎖定一列也可能鎖定其他列。
交易隔離度增加會導致並行性降低,也就是兩筆交易無法同時使用相同資料的能力。 欲了解更多資訊,請參閱 設定交易隔離層。
此章節包含下列主題。