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

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

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

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

有帮助吗?

解决方案

在 TP 系统中,回滚可以基于以下情况发生:

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

回滚不必像您所说的“犯罪”时发生,我想您的意思是“试图提交”。交易在启动后的任何时候都可以回滚。

其他提示

在某些情况下,会自动由于触发器或约束违反发生回滚。在其他国家(如你见过),存储过程本身并回滚。艾登是正确的自动提交变化。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top