MySQL 8.3 Release Notes
SAVEPOINT identifier
ROLLBACK [WORK] TO [SAVEPOINT] identifier
RELEASE SAVEPOINT identifier
InnoDB
支持 SQL 语句 SAVEPOINT
、ROLLBACK TO SAVEPOINT
、RELEASE SAVEPOINT
和可选的 WORK
关键字用于 ROLLBACK
。
该 SAVEPOINT
语句设置了一个名为 identifier
的事务保存点。如果当前事务已经有了同名的保存点,则旧的保存点将被删除,新的保存点将被设置。
该 ROLLBACK TO SAVEPOINT
语句将事务回滚到命名的保存点,而不终止事务。在回滚过程中,对于当前事务在设置保存点后所做的行修改将被撤销,但是 InnoDB
不会释放在内存中存储的行锁。(对于新插入的行,锁信息是由事务 ID 存储在行中;锁不是单独存储在内存中的。在这种情况下,行锁将在撤销中释放。)设置在命名保存点之后的保存点将被删除。
如果 ROLLBACK TO SAVEPOINT
语句返回以下错误,这意味着没有指定名称的保存点存在:
ERROR 1305 (42000): SAVEPOINT identifier does not exist
该 RELEASE SAVEPOINT
语句从当前事务的保存点集中删除了命名的保存点。没有提交或回滚发生。如果保存点不存在,将抛出错误。
如果执行 COMMIT
或 ROLLBACK
语句(不指定保存点),则当前事务的所有保存点将被删除。
当存储函数被调用或触发器被激活时,将创建一个新的保存点级别。之前级别的保存点将变得不可用,因此不会与新级别的保存点冲突。当函数或触发器终止时,它创建的保存点将被释放,之前的保存点级别将被恢复。