当数据变更安全写入硬盘后,回滚日志文件便失去了存在的意义,可以立即删除。若在删除前发生断电或系统崩溃,恢复进程会将日志内容写回数据库文件,即使数据库本身未发生变化。

如果在删除后发生崩溃或断电,一切看起来就像所有变更都已写入磁盘。SQLite正是通过回滚日志文件是否存在来判断数据库文件是否完成变更的。

删除文件并非原子操作,但从用户进程角度来看,它是原子性的。进程只能得到文件存在与否的二元答案。

在事务提交过程中,如果系统崩溃或断电,SQLite会检查回滚日志文件是否存在。如果存在,则事务未完成,需要回滚数据库文件;如果不存在,则事务已成功提交。

事务的存在与否取决于回滚日志文件。由于删除文件对用户进程来说是原子操作,因此整个事务也呈现出原子性。