文档首页
MySQL 8.4 参考手册
相关文档 下载本手册

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 语句使用名称 标识符 设置一个已命名的事务保存点。如果当前事务已有名为 标识符 的保存点,则删除旧的保存点并设置新的保存点。

ROLLBACK TO SAVEPOINT 语句将事务回滚到指定的保存点,而不会终止事务。回滚操作会撤消当前事务在设置保存点后对行所做的修改,但 InnoDB 不会 释放保存点后存储在内存中的行锁。(对于新插入的行,锁信息由存储在行中的事务 ID 携带;锁不会单独存储在内存中。在这种情况下,行锁会在撤消操作中释放。)设置时间晚于指定保存点的保存点将被删除。

如果 ROLLBACK TO SAVEPOINT 语句返回以下错误,则表示不存在具有指定名称的保存点:

ERROR 1305 (42000): SAVEPOINT identifier does not exist

RELEASE SAVEPOINT 语句从当前事务的保存点集中删除指定的保存点。不会执行提交或回滚操作。如果保存点不存在,则会出现错误。

如果执行 COMMIT 或未指定保存点的 ROLLBACK,则当前事务的所有保存点都将被删除。

调用存储函数或激活触发器时,会创建一个新的保存点级别。先前级别上的保存点将不可用,因此不会与新级别上的保存点冲突。当函数或触发器终止时,它创建的所有保存点都将被释放,并且先前保存点级别将恢复。