SQLite3数据库写入中断会发生什么?
问题:实际写入sqlite3数据库文件的时间是什么时候,如果这个过程被打断会发生什么?
信息:
我有一个用Python写的程序,已经做了几个星期,使用sqlite3来存储它运行的模拟数据。但是我有两个情况比较担心。
最近我们这儿经常有雷暴天气,停电几次。而且我更新写入数据库的文件的频率也比较高,为此我需要停止当前正在运行的模拟线程。在这两种情况下,尤其是停电的情况,我担心这个线程被打断后会发生什么。如果在从日志文件写入数据库的时候,我突然中断了它或者停电了,会不会导致信息没写进去?会不会写进去但数据损坏?会不会把整个sqlite3数据库文件都搞坏?
简单来说,我想知道数据到底是什么时候真正写入文件的,而不仅仅是写入日志文件。如果这个写入过程因为某种原因没有完成,日志和数据库文件会发生什么?
~n
1 个回答
4
SQLite使用的是一种叫做“原子提交”的技术,这意味着要么所有的操作都成功,要么一个都不执行。
如果你担心数据库可能会处于不正确的状态,那么你需要确保把整个“过渡”状态放在一个叫做BEGIN TRANSACTION ... COMMIT
的块里。
关于如何写入日志文件的详细信息,包括在出现故障时的处理,可以参考文档《SQLite 版本 3 的文件锁定和并发》。