如果在更改数据库时强制终止程序,SQLite数据库是否真的保持不变?

时间:2009-05-14 11:31:28

标签: c++ database sqlite transactions

SQLite文档says it is transactional

链接文章中的解释指出,如果一个静态链接有SQLite C ++代码的C ++程序被强行终止(例如,WinAPI中的TerminateProcess())或者在执行写入时崩溃,则数据库保持不变 - 完全更新或完全不变。

有没有人真正看到这种可靠的工作?这是否无条件地工作或是否需要采取任何其他措施?

2 个答案:

答案 0 :(得分:4)

由于没有完全安全的原子交易方式,因此总是有可能出现损坏状态。

然而,

SQLite在提交时需要特别小心,即使程序崩溃也应该保持数据库完好无损。它比使用平面文件和write-truncate-rename循环更安全,这是最近关于ext4的讨论中的问题。

请参阅Atomic Commit以获取有关如何完成此操作的参考。

答案 1 :(得分:1)

这还取决于您的日记模式。如果您正在对文件进行日志记录并且数据库确实已损坏,则很有可能将其恢复。