MySQL 8.4 发行说明
SAVEPOINT identifier
ROLLBACK [WORK] TO [SAVEPOINT] identifier
RELEASE SAVEPOINT identifier
InnoDB
支持 SQL 语句 SAVEPOINT
、ROLLBACK TO SAVEPOINT
、RELEASE SAVEPOINT
以及 ROLLBACK
的可选关键字 WORK
。
SAVEPOINT
语句使用名称 标识符
设置一个已命名的事务保存点。如果当前事务已有名为 标识符
的保存点,则删除旧的保存点并设置新的保存点。
ROLLBACK TO SAVEPOINT
语句将事务回滚到指定的保存点,而不会终止事务。回滚操作会撤消当前事务在设置保存点后对行所做的修改,但 InnoDB
不会 释放保存点后存储在内存中的行锁。(对于新插入的行,锁信息由存储在行中的事务 ID 携带;锁不会单独存储在内存中。在这种情况下,行锁会在撤消操作中释放。)设置时间晚于指定保存点的保存点将被删除。
如果 ROLLBACK TO SAVEPOINT
语句返回以下错误,则表示不存在具有指定名称的保存点:
ERROR 1305 (42000): SAVEPOINT identifier does not exist
RELEASE SAVEPOINT
语句从当前事务的保存点集中删除指定的保存点。不会执行提交或回滚操作。如果保存点不存在,则会出现错误。
如果执行 COMMIT
或未指定保存点的 ROLLBACK
,则当前事务的所有保存点都将被删除。
调用存储函数或激活触发器时,会创建一个新的保存点级别。先前级别上的保存点将不可用,因此不会与新级别上的保存点冲突。当函数或触发器终止时,它创建的所有保存点都将被释放,并且先前保存点级别将恢复。