SQLite - PRAGMA 命令

SQLite PRAGMA 命令是一个特殊的命令,用于控制 SQLite 环境中的各种环境变量和状态标志。 可以读取一个 PRAGMA 值,也可以根据需要进行设置。

语法

要查询当前的 PRAGMA 值,只需提供 pragma 的名称。

PRAGMA pragma_name;

要为 PRAGMA 设置新值,请使用以下语法。

PRAGMA pragma_name = value;

设置模式可以是名称或等效整数,但返回的值将始终是整数。


auto_vacuum Pragma

auto_vacuum pragma 获取或设置自动真空模式。 以下是简单的语法。

PRAGMA [database.]auto_vacuum;
PRAGMA [database.]auto_vacuum = mode;

其中 mode 可以是以下任何一种 −

序号 Pragma 值 & 说明
1

0 or NONE

Auto-vacuum 已禁用。 这是默认模式,这意味着数据库文件永远不会缩小大小,除非使用 VACUUM 命令手动清理它。

2

1 or FULL

Auto-vacuum 已启用并且是全自动的,它允许在从数据库中删除数据时缩小数据库文件。

3

2 or INCREMENTAL

Auto-vacuum 已启用,但必须手动激活。 在这种模式下,参考数据被保留,但空闲页面被简单地放在空闲列表中。 这些页面可以随时使用 incremental_vacuum pragma 恢复。


cache_size Pragma

cache_size pragma 可以获取或临时设置内存中页面缓存的最大大小。 以下是简单的语法。

PRAGMA [database.]cache_size;
PRAGMA [database.]cache_size = pages;

pages 值表示缓存中的页数。 内置页面缓存的默认大小为 2,000 页,最小大小为 10 页。


case_sensitive_like Pragma

case_sensitive_like pragma 控制内置 LIKE 表达式的大小写敏感性。 默认情况下,此 pragma 为 false,这意味着内置 LIKE 运算符忽略字母大小写。 以下是简单的语法。

PRAGMA case_sensitive_like = [true|false];

无法查询此 pragma 的当前状态。


count_changes Pragma

count_changes pragma 获取或设置数据操作语句(如 INSERT、UPDATE 和 DELETE)的返回值。 以下是简单的语法。

PRAGMA count_changes;
PRAGMA count_changes = [true|false];

默认情况下,此编译指示为 false,并且这些语句不返回任何内容。 如果设置为 true,则每个提到的语句都将返回一个单列单行表,该表由一个整数值组成,指示受操作影响的行。


database_list Pragma

database_list pragma 将用于列出所有附加的数据库。 以下是简单的语法。

PRAGMA database_list;

这个 pragma 将返回一个三列表,每个打开或附加的数据库有一行,给出数据库序列号、它的名称和关联的文件。


encoding Pragma

encoding pragma 控制字符串如何编码和存储在数据库文件中。 以下是简单的语法。

PRAGMA encoding;
PRAGMA encoding = format;

格式值可以是 UTF-8、UTF-16leUTF-16be 之一。


freelist_count Pragma

freelist_count pragma 返回一个整数,表示当前有多少数据库页面被标记为空闲和可用。 以下是简单的语法。

PRAGMA [database.]freelist_count;

格式值可以是 UTF-8、UTF-16leUTF-16be 之一。


index_info Pragma

index_info pragma 返回有关数据库索引的信息。 以下是简单的语法。

PRAGMA [database.]index_info( index_name );

结果集将为包含在索引中的每一列包含一行,给出列序列、表中的列索引和列名。


index_list Pragma

index_list pragma 列出与表关联的所有索引。 以下是简单的语法。

PRAGMA [database.]index_list( table_name );

结果集将包含每个索引的一行,给出索引序列、索引名称和指示索引是否唯一的标志。


journal_mode Pragma

journal_mode pragma 获取或设置控制日志文件如何存储和处理的日志模式。 以下是简单的语法。

PRAGMA journal_mode;
PRAGMA journal_mode = mode;
PRAGMA database.journal_mode;
PRAGMA database.journal_mode = mode;

下表列出了五种受支持的日志模式。

序号 Pragma 值 & 说明
1

DELETE

这是默认模式。 在事务结束时,日志文件被删除。

2

TRUNCATE

日志文件被截断为零字节长度。

3

PERSIST

日志文件保留在原处,但标题被覆盖以指示日志不再有效。

4

MEMORY

日志记录保存在内存中,而不是磁盘上。

5

OFF

不保留日记帐记录。


max_page_count Pragma

max_page_count pragma 获取或设置数据库允许的最大页数。 以下是简单的语法。

PRAGMA [database.]max_page_count;
PRAGMA [database.]max_page_count = max_page;

默认值为 1,073,741,823,即 1 giga-page,这意味着如果默认 1 KB 页面大小,这允许数据库增长到 1 TB。


page_count Pragma

page_count Pragma 返回数据库中的当前页数。 以下是简单的语法 −

PRAGMA [database.]page_count;

数据库文件的大小应该是 page_count * page_size。


page_size Pragma

page_size pragma 获取或设置数据库页面的大小。 以下是简单的语法。

PRAGMA [database.]page_size;
PRAGMA [database.]page_size = bytes;

默认情况下,允许的大小为 512、1024、2048、4096、8192、16384 和 32768 字节。 在现有数据库上更改页面大小的唯一方法是设置页面大小,然后立即 VACUUM 数据库。


parser_trace Pragma

parser_trace pragma 控制在解析 SQL 命令时打印调试状态。 以下是简单的语法。

PRAGMA parser_trace = [true|false];

默认情况下,它设置为 false,但通过将其设置为 true 启用时,SQL 解析器将在解析 SQL 命令时打印其状态。


recursive_triggers Pragma

recursive_triggers pragma 获取或设置递归触发器功能。 如果未启用递归触发器,则触发器操作不会触发另一个触发器。 以下是简单的语法。

PRAGMA recursive_triggers;
PRAGMA recursive_triggers = [true|false];

schema_version Pragma

schema_version pragma 获取或设置存储在数据库标头中的模式版本值。 以下是简单的语法。

PRAGMA [database.]schema_version;
PRAGMA [database.]schema_version = number;

这是一个 32 位有符号整数值,用于跟踪架构更改。 每当执行模式更改命令(如 CREATE... 或 DROP...)时,此值都会增加。


secure_delete Pragma

secure_delete pragma 用于控制如何从数据库中删除内容。 以下是简单的语法。

PRAGMA secure_delete;
PRAGMA secure_delete = [true|false];
PRAGMA database.secure_delete;
PRAGMA database.secure_delete = [true|false];

安全删除标志的默认值通常是关闭的,但这可以通过 SQLITE_SECURE_DELETE 构建选项进行更改。


sql_trace Pragma

sql_trace pragma 用于将 SQL 跟踪结果转储到屏幕上。 以下是简单的语法。

PRAGMA sql_trace;
PRAGMA sql_trace = [true|false];

SQLite 必须使用 SQLITE_DEBUG 指令编译才能包含此 pragma。


synchronous Pragma

synchronous pragma 获取或设置当前磁盘同步模式,该模式控制 SQLite 将数据一路写入物理存储的积极程度。 以下是简单的语法。

PRAGMA [database.]synchronous;
PRAGMA [database.]synchronous = mode;

SQLite 支持表中列出的以下同步模式。

序号 Pragma 值 & 说明
1

0 or OFF

完全没有同步

2

1 or NORMAL

在每个关键磁盘操作序列后同步

3

2 or FULL

每次关键磁盘操作后同步


temp_store Pragma

temp_store pragma 获取或设置临时数据库文件使用的存储模式。 以下是简单的语法。

PRAGMA temp_store;
PRAGMA temp_store = mode;

SQLite supports the following storage modes.

序号 Pragma 值 & 说明
1

0 or DEFAULT

使用编译时默认值。 通常是文件。

2

1 or FILE

使用基于文件的存储。

3

2 or MEMORY

使用基于内存的存储。


temp_store_directory Pragma

temp_store_directory pragma 获取或设置用于临时数据库文件的位置。 以下是简单的语法。

PRAGMA temp_store_directory;
PRAGMA temp_store_directory = 'directory_path';

user_version Pragma

user_version pragma 获取或设置存储在数据库标头中的用户定义版本值。 以下是简单的语法。

PRAGMA [database.]user_version;
PRAGMA [database.]user_version = number;

这是一个 32 位有符号整数值,可由开发人员设置以用于版本跟踪。


writable_schema Pragma

writable_schema pragma 获取或设置修改系统表的能力。 以下是简单的语法。

PRAGMA writable_schema;
PRAGMA writable_schema = [true|false];

如果设置了此 pragma,则可以创建和修改以 sqlite_ 开头的表,包括 sqlite_master 表。 使用 pragma 时要小心,因为它可能导致数据库完全损坏。