我想知道为什么 SQLite 在路径中创建两个文件。这些文件的区别是什么。
我有一个数据库名称mydatabase
。
当我在给定路径中看到有两个文件时。
data/data/pack name/databases/....
1-mydatabase
2-mydatabase-journal
我想知道为什么 SQLite 在路径中创建两个文件。这些文件的区别是什么。
我有一个数据库名称mydatabase
。
当我在给定路径中看到有两个文件时。
data/data/pack name/databases/....
1-mydatabase
2-mydatabase-journal
mydatabase
是主数据库文件,其中包含有关该数据库的所有内容。
mydatabase-journal
是日志文件。默认情况下它不存在,并且仅在必要时由 SQLite 创建,以保留 SQLite 想要对数据库执行的操作的意图日志。基本上,这是在事务正确完成后应该对主数据库文件执行的操作的意图。如果您正常完成所有事务并优雅地断开与数据库的连接,-journal
文件将正常自动删除。
如果断开连接是突然的——比如进程被杀死或崩溃,-journal
文件将保留并且不应该被删除。当 SQLite 下次再次打开该数据库时,它会注意到-journal
文件的存在,并会重播或回滚未完成的事务,从而使主数据库文件保持一致且不损坏。
如果您-journal
手动删除文件,则无法保证恢复并且数据库可能完全损坏 - 因此,请勿删除-journal
文件。
正确删除-journal
文件的最简单方法可能是执行以下命令:
sqlite3 mysqlitedatabase.db VACUUM
它将 VACUUM(优化)您的数据库,结果应该只留下主文件。