SQLite pragma(journal_mode)语句的持久性

3
假设我有一个名为schema.sql的脚本,用于分配一个新的SQLite数据库和所需的模式。如果此脚本在任何DML之前包含PRAGMA journal_mode = 'wal';,那么数据库是否会持续设置为WAL模式?还是日志模式需要在每个连接/命令上配置?
2个回答

6

仅在WAL模式下,日志模式才被持久化。根据文档所述:

与其他日志模式不同,PRAGMA journal_mode = WAL是持久的。如果一个进程设置了WAL模式,然后关闭并重新打开数据库,则数据库将以WAL模式重新开启。相反,如果一个进程设置(例如)PRAGMA journal_mode = TRUNCATE,然后关闭并重新打开数据库,数据库将以默认回滚模式DELETE而不是先前的TRUNCATE设置重新开启。


1
经过一些实验,发现日志模式被持久化。
为了演示:
PS C:\> sqlite3 TestDb.db

sqlite> PRAGMA journal_mode;
delete
sqlite> PRAGMA journal_mode = 'wal';
wal
// terminate session (ctrl+c)
PS C:\> sqlite3 TestDb.db
sqlite> PRAGMA journal_mode;
wal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接