首页 > 解决方案 > 数据库如何提供原子性?

问题描述

假设我有一个应该将列值增加 100 的事务。我可以使用一个简单的事务来实现这一点

Begin
Update table
set col1 = col1+100
where col2=val
End

我想知道数据库如何提供原子性。假设我们写入磁盘后出现电源故障,但已收到交易完成的确认。我们可能会认为 write 没有成功,但确实成功了,而且我们最终可能会进行事务。数据库如何防范这种情况?

标签: databasetransactions

解决方案


在将更改写入磁盘之前,数据库首先写入日志文件。此日志文件将在崩溃后的“实例恢复”期间引用。

日志记录被设计为即时的(我们使用更快的磁盘来写入日志)而写入数据文件是“惰性”完成的,即每当写入处理器空闲时。


推荐阅读