将显式事务或隐性事务回滚到事务的起点或事务内的某个保存点。
在使用时,它表示该保存点是当前事务范围内惟一的保存点。
将用户指定的事务回滚到事务内的上一个保存点或事务开头。
在发生错误的情况下,事务逻辑可以指定该事务回滚到某个保存点。
ROLLBACK语句将失败并收到一个错误:保存点回滚不允许在同一事务中更新较旧的服务器。
当一个事务回滚到某个保存点时,在保存点之后打开的所有未被占用的指针将被关闭。
或者,如果没有使用可选的svpt1标识符,将对当前事务中指定的最近的一个保存点执行回滚。
在指定的SAVEPOINT语句之后获得的所有锁仍然保留,直到事务结束。
清单3中的示例演示了在一个连接到stores_demo数据库的事务中使用SAVEPOINT语句。
它在插入一个新客户之前设置了一个名为newcustomer的保存点,并在添加新客户的订单之前添加了一个名为neworder的保存点。
如果对较旧的服务器执行更新的话,对保存点执行的任何回滚都会失败。
使用UNIQUE关键字设置另一个名为newcustomer的保存点将生成一个错误。
SAVEPOINT语句定义事务执行过程中的中间点。
当使用该语句时,将回滚到发生在svpt1保存点之后的操作。
SAVEPOINT语句在事务的当前位置设置了一个保存点。
上面的方括号表示savepoint-name是可选的。
执行了RELEASESAVEPOINT语句或事务结束后,则不能再使用该保存点。
使用其他客户机的应用程序也可以在IDS中使用保存点,只需要将保存点语句直接发送给服务器。
代码设置了一个与过程内部设置的保存点同名的newcustomer保存点。
这个回滚将撤销在设置neworder保存点之后执行的所有操作。
清单5中的示例演示了RELEASESAVEPOINT语句的效果。
使用ROLLBACKTOSAVEPOINT语句可以撤消该点后的所有更改。
1·You can use all of the savepoint statements within stored procedures.
您可以在存储过程中使用所有保存点语句。
2·Any reference to a released savepoint is invalid and results in an error.
引用已释放的保存点是无效的,并导致一个错误。
3·Procedure calls can be nested or recursive, but the scope of a savepoint is restricted to the execution of the stored procedure in which it is defined.
过程调用可以是嵌套的或递归的,但是保存点的范围被限制为定义它的存储过程的执行。
4·In the case of an error, the transaction logic can specify that the transaction rollback to a savepoint.
在发生错误的情况下,事务逻辑可以指定该事务回滚到某个保存点。
5·The number of requests for a storage engine to place a savepoint.
存储引擎放置一个保存点的请求数。