下载本手册

8.2使用保存点

X devapi支持保存点,使您可以在可以恢复的事务中设置一个命名点。通过在事务中设置保存点,您可以稍后使用回滚功能来撤消设置保存点后发出的任何语句。如果您不再需要它们,可以发布保存点。本节文档如何使用x devapi中的保存点。看保存背景信息。

设置保存点

保存点由字符串名称标识。字符串可以包含允许标识符的任何字符。要创建保存点,请使用session.setsavepoint()操作,映射到SQL语句保存名称;。如果您未指定一个名称,一个被自动生成。例如通过发出:

session.setsavepoint()

使用自动生成的名称创建事务保存点,并使用savepoint的名称返回字符串。这个名字可以与之使用session.rollbackto()或者session.releaseavepoint()操作。这session.setsavepoint()操作可以在会话中多次调用,并且每次生成唯一的保存点名称时都会被调用。

也可以通过传递字符串手动定义保存点的​​名称名称。例如发布:

session.setsavepoint('名称')

导致具有指定的事务保存点名称,由操作作为字符串返回。这session.setsavepoint('名称')操作可以通过这种方式多次调用操作,如果是名称已已被用于保存点,然后删除以前的保存点,并设置一个新的保存点。

滚回一个保存点

会话具有交易保存点时,您可以撤消使用的任何后续事务session.rollbackto()操作,哪个地图到了回滚名称陈述。例如,发出:

session.rollbackto('名称')

滚回事务保存点名称。只要给定的保存点尚未发布,此操作就会成功。滚动回到其他保存点之前创建的保存点导致随后的保存点被释放或回滚。例如:

session.starttransaction()(发生一些数据修改...)会话.setsavepoint('point1')<----成功(发生一些数据修改......)session.setsavepoint('point2')<----成功(发生一些数据修改......)session.rollbackto('point1')<----成功session.rollbackto('point1')<----仍然成功,但职位保持同一session.rollbackto('point2')<----生成错误,因为上面已经清除了point2 session.rollbackto('point1')<----仍然成功

发布保存点

取消保存点,例如,当不再需要时,使用ReleaseAvePoint()并以您想要发布的保存点的名称传递。例如,发出:

session.releaseavepoint('名称')

发布保存点名称

保存点和隐式事务行为

SavePoints的确切行为由服务器定义,具体而具体是如何配置AutoCommit的。看自动查询,提交和回滚

例如,考虑以下陈述,没有明确开始session.starttransaction()或类似的电话:

session.setsavepoint('testsavepoint');session.releaseavepoint('testsavepoint');

如果在服务器上启用了AutoCommit模式,则这些语句会导致错误,因为保存点命名testsavepoint.不存在。这是因为呼叫session.setsavepoint()创建事务,然后是保存点并直接提交它。结果是呼叫时不存在保存点ReleaseAvePoint()已发行,而是在自己的交易中。在这种情况下,对于保存点来生存,您需要首先启动显式事务块。