Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  SAVEPOINT, ROLLBACK TO SAVEPOINT, and RELEASE SAVEPOINT Statements

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 和可选的 WORK 关键字用于 ROLLBACK

SAVEPOINT 语句设置了一个名为 identifier 的事务保存点。如果当前事务已经有了同名的保存点,则旧的保存点将被删除,新的保存点将被设置。

ROLLBACK TO SAVEPOINT 语句将事务回滚到命名的保存点,而不终止事务。在回滚过程中,对于当前事务在设置保存点后所做的行修改将被撤销,但是 InnoDB 不会释放在内存中存储的行锁。(对于新插入的行,锁信息是由事务 ID 存储在行中;锁不是单独存储在内存中的。在这种情况下,行锁将在撤销中释放。)设置在命名保存点之后的保存点将被删除。

如果 ROLLBACK TO SAVEPOINT 语句返回以下错误,这意味着没有指定名称的保存点存在:

ERROR 1305 (42000): SAVEPOINT identifier does not exist

RELEASE SAVEPOINT 语句从当前事务的保存点集中删除了命名的保存点。没有提交或回滚发生。如果保存点不存在,将抛出错误。

如果执行 COMMITROLLBACK 语句(不指定保存点),则当前事务的所有保存点将被删除。

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