database - 数据库如何提供原子性?
问题描述
假设我有一个应该将列值增加 100 的事务。我可以使用一个简单的事务来实现这一点
Begin
Update table
set col1 = col1+100
where col2=val
End
我想知道数据库如何提供原子性。假设我们写入磁盘后出现电源故障,但已收到交易完成的确认。我们可能会认为 write 没有成功,但确实成功了,而且我们最终可能会进行事务。数据库如何防范这种情况?
解决方案
在将更改写入磁盘之前,数据库首先写入日志文件。此日志文件将在崩溃后的“实例恢复”期间引用。
日志记录被设计为即时的(我们使用更快的磁盘来写入日志)而写入数据文件是“惰性”完成的,即每当写入处理器空闲时。
推荐阅读
- angular - 在 ControlValueAccessor 中调用registeredOnChange() 时不调用writeValue()
- mysql - 外键约束格式不正确-MYSQL
- jquery - 如何使用 :after 选择器通过 jQuery 更改背景颜色?
- angularjs - Laravel 和 AngularJS 路由问题
- ios - 当我们必须要求在 App 中使用 In-App-Purchase 时
- ios - 将 Swift 静态库与 Objective-C 项目一起使用时会出错
- angular - 如何在 `*ngFor` 循环中有条件地添加元素?
- javascript - TypeError:对象不支持“最终”的属性或方法
- reactjs - React 中的条件渲染按钮单击
- ios - IOS 应用内购买最大数量