文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美國信紙尺寸) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  SAVEPOINT、ROLLBACK TO SAVEPOINT 和 RELEASE SAVEPOINT 陳述式

15.3.4 SAVEPOINT、ROLLBACK TO SAVEPOINT 和 RELEASE SAVEPOINT 陳述式

SAVEPOINT identifier
ROLLBACK [WORK] TO [SAVEPOINT] identifier
RELEASE SAVEPOINT identifier

InnoDB 支援 SQL 陳述式 SAVEPOINTROLLBACK TO SAVEPOINTRELEASE SAVEPOINT,以及用於 ROLLBACK 的可選 WORK 關鍵字。

SAVEPOINT 陳述式會設定一個名為 identifier 的具名交易儲存點。如果目前的交易已存在同名的儲存點,舊的儲存點會被刪除並設定一個新的儲存點。

ROLLBACK TO SAVEPOINT 陳述式會將交易回滾到指定的儲存點,而不會終止交易。目前交易在儲存點設定後對列所做的修改會在回滾中被取消,但 InnoDB 不會 釋放在儲存點之後儲存在記憶體中的列鎖。(對於新插入的列,鎖定資訊會由儲存在列中的交易 ID 攜帶;鎖定不會單獨儲存在記憶體中。在這種情況下,列鎖會在還原中釋放。) 在指定儲存點之後設定的儲存點會被刪除。

如果 ROLLBACK TO SAVEPOINT 陳述式傳回以下錯誤,表示不存在具有指定名稱的儲存點

ERROR 1305 (42000): SAVEPOINT identifier does not exist

RELEASE SAVEPOINT 陳述式會從目前交易的儲存點集合中移除指定的儲存點。不會發生提交或回滾。如果儲存點不存在,則會產生錯誤。

如果您執行 COMMIT 或沒有指定儲存點的 ROLLBACK,則目前交易的所有儲存點都會被刪除。

當呼叫預存函數或觸發器被啟動時,會建立一個新的儲存點層級。先前層級上的儲存點會變得不可用,因此不會與新層級上的儲存點發生衝突。當函數或觸發器終止時,它建立的任何儲存點都會被釋放,並且先前儲存點層級會被還原。