首页 > 解决方案 > 事务的提交如何工作?

问题描述

用我的话来说,“事务”将操作作为原子处理,比如说如果一个失败意味着所有的都会失败。但是当事务的提交由于某种原因失败时会发生什么?

考虑一下:

  1. 交易.open
  2. 插入1
  3. 插入2
  4. 事务提交

这究竟是如何工作的?

A.2,3 将被执行,如果其中一个失败,所有更改将从数据库中恢复,因为缺少 4?在这种情况下,如果 2,3 的执行正常但 4 失败,那么应该成功的整个操作实际上会失败?

或者

B.2,3 不会在数据库级别执行,如果一切正常,那么 4. 将执行数据库中的实际命令吗?在这种情况下,如果 4 由于某种原因在其操作的中途失败意味着会发生部分 - 非原子 - 插入?

或者

C.答案不一样?

谢谢!

标签: transactionsrdbms

解决方案


仅当所有步骤都成功并且事务提交也成功发生(在您的示例中为步骤 4)时,才会在 DB 中进行更改。要么全有,要么全无。

查看ACID事务属性。


推荐阅读