MySQL 9.0 發行說明
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。如果儲存點不存在,則會發生錯誤。
如果執行 COMMIT
,或是不指定儲存點名稱的 ROLLBACK
,則目前交易的所有儲存點都會被刪除。
當呼叫預存函數或啟用觸發器時,會建立新的儲存點層級。先前層級的儲存點會變得不可用,因此不會與新層級的儲存點衝突。當函數或觸發器終止時,它所建立的任何儲存點都會被釋放,並且會還原先前的儲存點層級。