MySQL 8.4 發行說明
SAVEPOINT identifier
ROLLBACK [WORK] TO [SAVEPOINT] identifier
RELEASE SAVEPOINT identifier
InnoDB
支援 SQL 陳述式 SAVEPOINT
、ROLLBACK TO SAVEPOINT
、RELEASE 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
,則目前交易的所有儲存點都會被刪除。
當呼叫預存函數或觸發器被啟動時,會建立一個新的儲存點層級。先前層級上的儲存點會變得不可用,因此不會與新層級上的儲存點發生衝突。當函數或觸發器終止時,它建立的任何儲存點都會被釋放,並且先前儲存點層級會被還原。