第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語句對何時寫資料、何時撤銷進行明確的管理;還學習瞭如何使用保留點,更好地控制回退操作。