1

最近发布了这个问题,关于一般情况下交易的定义。这个问题的一个常见答案是事务应该是一个原子工作单元

我的问题与这种原子性有关(我认为)我经常在 SQL 存储过程中看到对 ROLLBACK 的显式调用。

明确要求回滚是事务处理系统的普遍要求吗?

如果提交时发生错误,是否会自动回滚?

4

2 回答 2

3

在 TP 系统中,回滚可以基于:

  • 一个明确的请求,比如调用 ROLLBACK 或类似的
  • 任何未捕获的异常或错误。这些可能包括:
    • 与参与者失去通信(在分布式事务中)
    • 无效或超出范围的值或参数
    • 超时,例如由于无法获取锁或用户延迟。
  • 在两阶段提交分布式事务中,参与者之一未能投票提交

正如您所说的“提交时”,不需要发生回滚,我猜您的意思是“尝试提交时”。事务可以在开始后的任何时间回滚。

于 2009-06-10T11:00:00.677 回答
0

在某些情况下,由于触发器或约束违反,会自动发生回滚。在其他情况下(如您所见),存储过程本身会进行回滚。Aiden 是正确的,自动提交会有所不同。

于 2009-06-10T10:59:45.013 回答