Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

15.3.4 保存点、回滚到保存点和释放保存点语句

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没有命名保存点。

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