事务的提交如何工作?
How transaction's commit works?
在我看来 'transaction' 将操作作为原子处理,如果一个失败意味着所有都会失败。但是当事务的提交由于某种原因失败时会发生什么?
考虑一下:
- transaction.open
- 插入 1
- 插入 2
- transaction.commit
这究竟是如何工作的?
A.2,3 将被执行,如果其中一个失败,所有更改将从数据库中恢复,因为缺少 4?在这种情况下,如果 2,3 的执行正常但 4 失败,那么应该成功的整个操作实际上会失败?
或
B.2,3 不会在数据库级别执行,如果一切正常,那么 4. 会在数据库中执行实际命令吗?
在这种情况下,如果 4 由于某种原因在其操作的中途失败意味着将发生部分 - 非原子 - 插入?
或
C.the答案有什么不同?
谢谢!
仅当所有步骤都成功并且事务提交也成功(在您的示例中为第 4 步)时,才会在数据库中进行更改。全有或全无。
查看 ACID 交易属性。
在我看来 'transaction' 将操作作为原子处理,如果一个失败意味着所有都会失败。但是当事务的提交由于某种原因失败时会发生什么?
考虑一下:
- transaction.open
- 插入 1
- 插入 2
- transaction.commit
这究竟是如何工作的?
A.2,3 将被执行,如果其中一个失败,所有更改将从数据库中恢复,因为缺少 4?在这种情况下,如果 2,3 的执行正常但 4 失败,那么应该成功的整个操作实际上会失败?
或
B.2,3 不会在数据库级别执行,如果一切正常,那么 4. 会在数据库中执行实际命令吗? 在这种情况下,如果 4 由于某种原因在其操作的中途失败意味着将发生部分 - 非原子 - 插入?
或
C.the答案有什么不同?
谢谢!
仅当所有步骤都成功并且事务提交也成功(在您的示例中为第 4 步)时,才会在数据库中进行更改。全有或全无。
查看 ACID 交易属性。