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

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,则当前事务的所有保存点都将被删除。

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