SQLite PRAGMA 命令怎么用?

文章导读
上一个 测验 下一个 SQLite PRAGMA 命令是一个特殊的命令,用于控制 SQLite 环境中的各种环境变量和状态标志。可以读取 PRAGMA 值,也可以根据需要设置它。
📋 目录
  1. auto_vacuum Pragma
  2. cache_size Pragma
  3. case_sensitive_like Pragma
  4. count_changes Pragma
  5. database_list Pragma
  6. encoding Pragma
  7. freelist_count Pragma
  8. index_info Pragma
  9. index_list Pragma
  10. journal_mode Pragma
A A

SQLite - PRAGMA



上一个
测验
下一个

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

语法

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

PRAGMA pragma_name;

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

PRAGMA pragma_name = value;

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

auto_vacuum Pragma

auto_vacuum pragma 用于获取或设置 auto-vacuum 模式。以下是简单的语法。

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

其中 mode 可以是以下任一值 −

序号 Pragma 值与描述
1

0 或 NONE

自动真空清理被禁用。这是默认模式,意味着数据库文件大小不会缩小,除非使用 VACUUM 命令手动执行真空清理。

2

1 或 FULL

自动真空清理被启用并完全自动,允许数据库文件在数据从数据库中删除时缩小。

3

2 或 INCREMENTAL

自动真空清理被启用,但必须手动激活。在此模式下,引用数据被保留,但空闲页仅被放入空闲列表中。这些页可以随时使用 incremental_vacuum pragma 恢复。

cache_size Pragma

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

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

pages 值表示缓存中的页数。内置页缓存的默认大小为 2000 页,最小大小为 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];

默认情况下,此 pragma 为 false,这些语句不返回任何内容。如果设置为 true,则每个提到的语句将返回一个单列单行表,其中包含一个整数值,表示操作影响的行数。

database_list Pragma

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

PRAGMA database_list;

此 pragma 将返回一个三列表,其中每行对应一个打开或附加的数据库,提供数据库序列号、名称和关联的文件。

encoding Pragma

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

PRAGMA encoding;
PRAGMA encoding = format;

format 值可以是 UTF-8UTF-16leUTF-16be 中的一个。

freelist_count Pragma

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

PRAGMA [database.]freelist_count;

format 值可以是 UTF-8UTF-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 用于获取或设置 journal mode,该模式控制 journal 文件的存储和处理方式。以下是简单的语法。

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

支持五种 journal mode,如下表所示。

序号 Pragma 值与描述
1

DELETE

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

2

TRUNCATE

journal 文件将被截断为零字节长度。

3

PERSIST

journal 文件保留原位,但头部将被覆盖以指示 journal 不再有效。

4

MEMORY

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

5

OFF

不保留 journal 记录。

max_page_count Pragma

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

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

默认值为 1,073,741,823,即一 giga-page,这意味着如果使用默认的 1 KB 页面大小,数据库可以增长到一 terabyte。

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 parser 将在解析 SQL 命令时打印其状态。

recursive_triggers Pragma

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

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

schema_version Pragma

schema_version pragma 用于获取或设置存储在数据库头部中的 schema 版本值。以下是简单的语法。

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

这是一个 32 位有符号整数值,用于跟踪 schema 更改。每当执行 schema 修改命令(如 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];

secure delete 标志的默认值为 off,但可以通过 SQLITE_SECURE_DELETE 构建选项更改。

sql_trace Pragma

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

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 支持以下存储模式。

序号 Pragma 值 & 描述
1

0 or DEFAULT

使用编译时默认值。通常为 FILE。

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 时要小心,因为它可能导致数据库完全损坏。