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

问题描述 投票:0回答:2

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

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

显式调用回滚是事务处理系统的常见要求吗?

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

sql transactions rollback
2个回答
3
投票

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

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

不需要像您所说的“提交时”那样发生回滚,我猜您的意思是“尝试提交时”。事务可以在启动后随时回滚。


0
投票

在某些情况下,由于触发或违反约束,会自动发生回滚。在其他情况下(就像您所看到的),存储过程本身会执行回滚。艾登是对的,自动提交会有所不同。

© www.soinside.com 2019 - 2024. All rights reserved.