事务处理:什么时候发生回滚?

时间:2009-06-10 10:52:47

标签: sql rollback atomicity

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

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

通常要求事务处理系统明确要求回滚吗?

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

2 个答案:

答案 0 :(得分:2)

在TP系统中,可以基于以下内容进行回滚:

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

当您说“提交时”时,不需要进行回滚,我猜您的意思是“在尝试提交时”。事务可以在开始后随时回滚。

答案 1 :(得分:0)

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