- 這一課介紹了
事務
是必須完整執行的SQL
語句塊。 - 我們學習瞭如何使用
COMMIT
和ROLLBACK
語句對何時寫數據、何時撤銷進行明確的管理; - 還學習瞭如何使用
保留點
,更好地控制回退操作。
20.1 事務處理
使用事務處理
(transaction processing
),通過確保成批的SQL
操作要麼完全執行,要麼完全不執行,來維護數據庫的完整性。
如果沒有錯誤發生,整組語句提交給(寫到)數據庫表;
如果發生錯誤,則進行回退(撤銷),將數據庫恢復到某個已知且安全的狀態。
事務transaction
指一組SQl
語句;回退rollback
指撤銷指定SQL
語句的過程;提交commit
指將未存儲的SQL
語句結果寫入數據庫表;保留點savepoint
指事務處理中設置的臨時佔位符placeholder
,可以對它發佈回退。
提示:可以回退哪些語句?
- 事務處理用來管理
INSERT
、UPDATE
和DELETE
語句。- 不能回退
SELECT
語句,也不能回退CREATE
或DROP
操作。- 事務處理中可以使用這些語句,但進行回退時,這些操作也不撤銷。
20.2 控制事務處理
管理事務的關鍵在於將SQL
語句組分解爲邏輯塊,並明確規定數據何時應該回退,何時不應該回退。
有的
DBMS
要求明確標識事務處理塊的開始和結束。
BEGIN TRANSACTION
和COMMIT TRANSACTION
語句之間的SQL
必須完全執行或者完全不執行。
COMMIT
用於保存更改ROLLBACK
用於撤銷。
20.2.1 使用ROLLBACK
SQL
的ROLLBACK
命令用來回退(撤銷)SQL
語句。
20.2.2 使用COMMIT
- 一般的
SQL
語句都是針對數據庫直接執行和編寫的,這就是所謂的隱式提交
(implicit commit
),即提交(寫或保存)操作是自動進行的。 - 在事務處理塊中,提交不會隱式進行。不過,不同
DBMS
的做法有所不同。有的DBMS
按隱式提交處理事務端,有的則不這樣。
進行明確的提交,使用COMMIT
語句。
20.2.3 使用保留點
- 要支持回退部分事務,必須在事務處理塊中的合適位置放置
佔位符
。這樣,如果需要回退,可以回退到某個佔位符。在SQL
中,這些佔位符稱爲保留點
。
在MariaDB
、MySQL
和Oracle
中創建佔位符,可使用SAVEPOINT
語句。
每個保留點都要取能夠標識它的唯一名字,以便在回退時,DBMS
知道回退到何處。
提示:保留點越多越好
保留點越多,你就越能靈活地進行回退。