【问题标题】:Transaction Processing: When does a rollback occur?事务处理:什么时候发生回滚?
【发布时间】:2010-11-01 18:30:14
【问题描述】:

最近this 发布了一个关于一般上下文中事务的定义的问题。这个问题的一个常见答案是事务应该是一个原子工作单元

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

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

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

【问题讨论】:

    标签: sql rollback atomic


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 是的,我的意思是尝试提交,这是一个区别,我真的应该指出这一点
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 2013-12-29
      • 1970-01-01
      相关资源
      最近更新 更多