复习软件设计师保存点时,先在时间线上标出保存点,再判断撤销范围。保存点局部回滚保留该点之前的修改;事务完整回滚撤销整笔尚未提交的事务。两者都不能当成COMMIT。下面用PostgreSQL事务块中的原创小例子说明,不代表所有数据库或驱动的默认行为。

在草稿上画出三段操作

假设一张教学用库存表,甲商品为10件、乙商品为20件。BEGIN之后先把甲改为9件,再设置SAVEPOINT s,随后把乙改为18件。此时还没有提交。软件设计师保存点问题要分别问:保存点设在哪里,最后执行的是哪条回滚命令。

知英教育建议在每条操作旁写“点前”或“点后”,不要只根据执行顺序猜结果。这里的数量仅用于解释事务,不对应真实订单或客户数据。

保存点前后甲乙库存数值时间线
教学数量只说明修改次序。

ROLLBACK TO撤销哪一段?

执行ROLLBACK TO SAVEPOINT s后,乙的修改被撤销,回到20;甲仍为9,因为它发生在s之前。这就是保存点局部回滚。事务仍然存在,接下来可以继续操作,再选择提交或放弃。

局部回滚之后有两条不同路径:选择COMMIT,会留下甲9、乙20;若还没有提交,而是选择ROLLBACK,则甲也回到10。判断事务完整回滚时,要看整笔事务尚未提交的修改,不能只盯着最近一次语句。

保存点局部回滚和完整回滚数值对照
两者的撤销范围不同。

释放保存点,不是提前保存数据

RELEASE SAVEPOINT用于移除不再需要的保存点,不是提交事务。PostgreSQL还规定,回滚到某保存点或释放它,会移除其后设置的保存点。已经COMMIT的修改,也不能靠后来一条ROLLBACK自动撤销。

向知英教育说明错题时,可以带上BEGIN、SAVEPOINT、回滚与COMMIT的位置。软件设计师保存点的关键是边界,不是背一个“出错就退回”的口号。本文不把PL/pgSQL过程等其他环境的规则直接套入普通SQL事务块。

事务操作继续释放提交放弃的决策清单
释放标记与提交事务不是同一件事。

复盘时写下三个判断

先确认事务是否已经提交,再定位保存点,最后逐项追踪值的去向。保存点局部回滚与事务完整回滚可以在同一题里先后出现,最后状态取决于实际执行路径。

需要整理数据库学习疑问,可查看软件设计师学习安排,经咨询入口联系知英教育,提供自编语句和判断过程。这里只作概念与练习说明,不称当期新增考点,也不承诺考试结果。

依据:PostgreSQL官方事务教程,核对日期2026年11月5日。