在创建数据库时,不仅会生成xxx.db数据库文件,而且还会生成xxx.db-journal。这个-journal文件是用来干嘛的?其实这个文件是sqlite用来实现原子提交和回滚功能的。如果没有这个文件,SQlite将无法回滚未完成的事务,如果在事务中间发生崩溃或者掉电,那么整个数据库就有可能损坏。
-journal——回滚日志
回滚日志通常位于数据库文件所在的目录,一般在事务开始时创建,事务结束时删除(这取决于日志模式)
日志模式:
DELETE:默认的日志模式,一般在事务开始时创建回滚日志,事务结束时删除回滚日志。
PERSIST:事务结束时不删除回滚日志,而是在日志文件头部覆写0,这样也可以达到删除文件同样的效果,却减少了反复创建删除回滚日志的磁盘开销。
MEMORY:将回滚日志存储在内存而不是磁盘中,但因为在磁盘中没有用于恢复的文件,如果在事务中间发生崩溃或者掉电,那么整个数据库就有可能损坏。
OFF:禁用SQLite原子提交和回滚功能。
-wal——预写日志
作用与-journal文件一样,用于在WAL模式下操作。
当数据库连接首次打开时,wal文件就会被创建。当最后一次数据库连接被正常关闭时,wal文件就会被删除。如果最后一次数据库连接没有正常关闭,wal文件会保存下来,直到下一次打开数据库时才会自动删除。
shm——共享内存文件
共享内存文件用于提供一块共享内存给多个进程在WAL模式中访问相同的数据库。
参考资料
Temporary Files Used By SQLite