文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  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。如果儲存點不存在,則會發生錯誤。

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

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