執行以下 DDL/DCL 語句會強制提交當前事務,並自動在獨立事務中執行,無法 ROLLBACK:
CREATE/ALTER/DROP DATABASE
CREATE/ALTER/DROP TABLE
RENAME TABLE
TRUNCATE TABLE
CREATE/DROP INDEX
CREATE/DROP EVENT
CREATE/DROP FUNCTION
CREATE/DROP PROCEDURE
START TRANSACTION;
DROP TABLE MyImportantData; -- 當前事務被強制 COMMIT,表永久刪除
ROLLBACK; -- 無效,數據已不屬於你
CREATE/ALTER/DROP TEMPORARY TABLE 不觸發隱式提交,但同樣不可回滾。
在事務中設置命名保存點,可部分回滾到某個保存點,不影響之前的更新。
SAVEPOINT savepoint_name; -- 創建
ROLLBACK TO savepoint_name; -- 回滾到此處
RELEASE SAVEPOINT savepoint_name; -- 釋放 (可選)
START TRANSACTION;
INSERT INTO tableA VALUES (1,2,3);
SAVEPOINT tableA_updated; -- 記錄點
INSERT INTO tableB VALUES (4,5,6);
-- 發現 tableB 邏輯有誤,只想撤銷 tableB
ROLLBACK TO tableA_updated; -- tableB 回滾,tableA 保留
COMMIT; -- 只提交 tableA