1. 程式人生 > 實用技巧 >第20課 管理事務處理

第20課 管理事務處理

第20課 管理事務處理

20.1 事務處理

使用事務處理(transaction processing),通過確保成批的SQL操作要麼完全執行,要麼完全不執行,來維護資料庫的完整性。

事務處理是一種機制,用來管理必須成批執行的SQL操作,保證資料庫不包含不完整的操作結果。利用事務處理,可以保證一組操作不會中途停止,它們要麼完全執行,要麼完全不執行(除非明確指示)。如果沒有錯誤發生,整組語句提交給(寫到)資料庫表;如果發生錯誤,則進行回退(撤銷),將資料庫恢復到某個已知且安全的狀態。

下面是關於事務處理需要知道的幾個術語:

  • 事務(transaction)指一組SQL語句;
  • 回退(rollback)指撤銷指定SQL語句的過程;
  • 提交(commit)指將未儲存的SQL語句結果寫入資料庫表;
  • 保留點(savepoint)指事務處理中設定的臨時佔位符(placeholder),可以對它釋出回退(與回退整個事務處理不同)。

20.2 控制事務處理

管理事務的關鍵在於將SQL語句組分解為邏輯塊,並明確規定資料何時應該回退,何時不應該回退。

MariaDB和MySQL中等同的程式碼為:

START TRANSACTION
...

Oracle使用的語法:

SET TRANSACTION
...

20.2.1 使用ROLLBACK

SQL的ROLLBACK命令用來回退(撤銷)SQL語句,請看下面的語句:

DELETE FROM Orders;
ROLLBACK;

在事務處理塊中,DELETE操作(與INSERT和UPDATE操作一樣)並不是最終的結果。

20.2.2 使用COMMIT

進行明確的提交,使用COMMIT語句。

為在Oracle中完成相同的工作,可如下進行:

SET TRANSACTION
DELETE OrderItems WHERE order_num = 12345;
DELETE Orders WHERE order_num = 12345;
COMMIT; 

20.2.3 使用保留點

使用簡單的ROLLBACK和COMMIT語句,就可以寫入或撤銷整個事務。但是,只對簡單的事務才能這樣做,複雜的事務可能需要部分提交或回退。

要支援回退部分事務,必須在事務處理塊中的合適位置放置佔位符。這樣,如果需要回退,可以回退到某個佔位符。

在SQL中,這些佔位符稱為保留點。在MariaDB、MySQL和Oracle中建立佔位符,可使用SAVEPOINT語句:

SAVEPOINT delete1;

每個保留點都要取能夠標識它的唯一名字,以便在回退時,DBMS知道回退到何處。

在MariaDB、MySQL和Oracle中,如下進行:

ROLLBACK TO delete1;

提示:保留點越多越好
可以在SQL程式碼中設定任意多的保留點,越多越好。為什麼呢?因為保留點越多,你就越能靈活地進行回退。

20.3 小結

我們學習瞭如何使用COMMIT和ROLLBACK語句對何時寫資料、何時撤銷進行明確的管理;還學習瞭如何使用保留點,更好地控制回退操作。