sqlite PRAGMA 设置是永久性的,还是在数据库关闭后“消失”的?

Are sqlite PRAGMA settings permanent or do they "disapear" after DB close?

提问人:Lumpi 提问时间:3/14/2019 更新时间:3/14/2019 访问量:794

问:

我想知道是否像 PRAGMA 语句这样。

编译指示 journal_mode = 关闭

连接关闭后“保留”在数据库中,或者如果每次打开与数据库的连接时都必须设置它?

SQLite的

评论


答:

1赞 MikeT 3/14/2019 #1

PRAGMA 设置是否是永久性的,取决于所使用的单个 PRAGMA 设置。

例如,journal_mode通常不是永久性的,因为:-

此编译指示查询或设置关联数据库的日志模式 替换为当前数据库连接。

但是,设置 WAL 是持久的,将数据库头文件中偏移量 18 和 19 处的字节设置为 2,如下所示:

WAL 日记模式使用预写日志而不是回滚 日志来实现事务。WAL 日记模式是 持续;设置后,它会在多个中保持有效 数据库连接以及关闭并重新打开数据库后。一个 WAL 日志模式下的数据库只能由 SQLite 版本访问 3.7.0 (2010-07-21) 或更高版本。

编译指示 schema.journal_mode = 删除 |截断 |坚持 |内存 |WAL |关闭

并根据

1.3.3. 文件格式版本号

偏移量 18 和 19 处的文件格式写入版本和文件格式读取版本旨在允许 以增强 SQLite 未来版本中的文件格式。在 当前版本的 SQLite,这两个值都是 1 表示回滚 日志模式和 2 用于 WAL 日志模式。如果一个版本 编码为当前文件格式规范的 SQLite 遇到 读取版本为 1 或 2 但写入版本为 1 的数据库文件 大于 2,则数据库文件必须被视为 只读。如果读取版本大于 2 的数据库文件 遇到时,则无法读取或写入该数据库。

数据库文件格式