13.3.4 SAVEPOINT,回滚到 SAVEPOINT 和释放 SAVEPOINT 语句

SAVEPOINT identifier
ROLLBACK [WORK] TO [SAVEPOINT] identifier
RELEASE SAVEPOINT identifier

InnoDB支持 SQL 语句SAVEPOINT回滚到保存点RELEASE SAVEPOINTROLLBACK的可选WORK关键字。

SAVEPOINT语句设置名称为* identifier *的命名事务保存点。如果当前事务具有相同名称的保存点,则将删除旧的保存点并设置一个新的保存点。

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

如果回滚到保存点语句返回以下错误,则 table 示不存在具有指定名称的保存点:

ERROR 1305 (42000): SAVEPOINT identifier does not exist

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

如果执行未命名保存点的COMMITROLLBACK,则当前事务的所有保存点都将被删除。

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