c++ - 如果在更改数据库时强行终止程序,SQLite数据库真的会保持完整吗?

标签 c++ database sqlite transactions

SQLite 文档 says it is transactional .

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

有人真正看到过它可靠地工作吗?这是无条件有效还是需要采取任何额外措施?

最佳答案

由于没有完全安全的方法来进行原子事务,因此总是有可能出现损坏的状态。

然而,SQLite 在提交时要特别小心,即使程序崩溃也应该保持数据库完好无损。它比使用平面文件和写入-截断-重命名循环更节省,这是最近关于 ext4 的讨论中的问题。

参见Atomic Commit有关如何完成此操作的引用。

关于c++ - 如果在更改数据库时强行终止程序,SQLite数据库真的会保持完整吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/862828/

相关文章:

c++ - 运行时检查实例 (Base*) 是否覆盖父函数 (Base::f())

ruby-on-rails - rake 中止 : Wrong number of arguments (0 for 1)

sqlite - sqlite 3.7.17在FreeBSD下的编译错误

mysql - 插入 Y 时更新记录 X 的最佳方法

java - 无法连接到数据库(找不到合适的驱动程序)

android sqlite按钮不可点击

c++ - HTTP 流服务器 : threads?

c++ - 在 sizeof 运算符上强制编译时错误

c++ - 使用 C++ 模板时对复制构造函数的 undefined reference

MySql 搜索查询无法返回内部包含 %20 的行