transactions - 事务的提交如何工作?
问题描述
用我的话来说,“事务”将操作作为原子处理,比如说如果一个失败意味着所有的都会失败。但是当事务的提交由于某种原因失败时会发生什么?
考虑一下:
- 交易.open
- 插入1
- 插入2
- 事务提交
这究竟是如何工作的?
A.2,3 将被执行,如果其中一个失败,所有更改将从数据库中恢复,因为缺少 4?在这种情况下,如果 2,3 的执行正常但 4 失败,那么应该成功的整个操作实际上会失败?
或者
B.2,3 不会在数据库级别执行,如果一切正常,那么 4. 将执行数据库中的实际命令吗?在这种情况下,如果 4 由于某种原因在其操作的中途失败意味着会发生部分 - 非原子 - 插入?
或者
C.答案不一样?
谢谢!
解决方案
仅当所有步骤都成功并且事务提交也成功发生(在您的示例中为步骤 4)时,才会在 DB 中进行更改。要么全有,要么全无。
查看ACID事务属性。
推荐阅读
- svn - 在 TortoiseSVN 存储库浏览器中恢复 Subversion 更改,而不是本地结帐
- c# - 如何摆脱剪贴板错误 - 间歇性?
- javascript - Flutter拖放坐标系
- google-apps-script - 将不同的功能合二为一
- javascript - 为什么没有为 Angular 8.0 发出我的点击事件?
- python - 不理解这本字典在迭代错误期间改变了大小
- excel - 添加位置和密件抄送/资源 - 不更新位置
- node.js - 错误的控制台输出和模板未呈现
- css - 是否可以让网格元素在容器中占用 1.5 个空间?
- c - 格式说明符内的格式说明符以更改前导零的大小