SQLite文档says it is transactional。
链接文章中的解释指出,如果一个静态链接有SQLite C ++代码的C ++程序被强行终止(例如,WinAPI中的TerminateProcess())或者在执行写入时崩溃,则数据库保持不变 - 完全更新或完全不变。
有没有人真正看到这种可靠的工作?这是否无条件地工作或是否需要采取任何其他措施?
答案 0 :(得分:4)
由于没有完全安全的原子交易方式,因此总是有可能出现损坏状态。
然而,SQLite在提交时需要特别小心,即使程序崩溃也应该保持数据库完好无损。它比使用平面文件和write-truncate-rename循环更安全,这是最近关于ext4的讨论中的问题。
请参阅Atomic Commit以获取有关如何完成此操作的参考。
答案 1 :(得分:1)
这还取决于您的日记模式。如果您正在对文件进行日志记录并且数据库确实已损坏,则很有可能将其恢复。