Sqlite 简明教程
SQLite - PRAGMA
SQLite PRAGMA 命令是一个特殊命令,用于控制 SQLite 环境中的各种环境变量和状态标志。可以读取 PRAGMA
值,也可以根据需要设置它。
Syntax
要查询当前的 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 −
Sr.No. |
Pragma Value & Description |
1 |
0 or NONE 禁用自动真空。这是默认模式,这意味着除非使用 VACUUM 命令手动对其进行真空吸尘,否则数据库文件的大小永远不会缩小。 |
2 |
1 or FULL 启用自动真空并完全自动,从而允许在从数据库中删除数据时数据库文件缩小。 |
3 |
2 or 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 为假,这意味着内建 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 为假,并且这些语句不会返回任何内容。如果设置为 true,每个提到的语句将返回一个单列单行表,其中包含一个单个整数值,指示受操作影响的行。
database_list Pragma
database_list pragma 将用于列出所有附加的数据库。下面是简单的语法。
PRAGMA database_list;
此 pragma 将返回一个三列表,每打开或附加一个数据库都会有一行,分别给出数据库的序号、名称和关联的文件。
encoding Pragma
encoding pragma 控制如何在数据库文件中对字符串进行编码和存储。下面是简单的语法。
PRAGMA encoding;
PRAGMA encoding = format;
格式值可以是 UTF-8, UTF-16le 或 UTF-16be 之一。
freelist_count Pragma
freelist_count pragma 返回单个整数,指示当前标记为已释放且可用的数据库页面数。下面是简单的语法。
PRAGMA [database.]freelist_count;
格式值可以是 UTF-8, UTF-16le 或 UTF-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;
下表列出了五种受支持的日志模式。
Sr.No. |
Pragma Value & Description |
1 |
DELETE 这是默认模式。在此模式中,在完成一个事务时,会删除日志文件。 |
2 |
TRUNCATE 将日志文件截断为 0 字节的长度。 |
3 |
PERSIST 保留日志文件,但覆盖其 header 以指示该日志文件不再有效。 |
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 KB,这允许数据库增长至一太字节。
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 [database.]schema_version;
PRAGMA [database.]schema_version = number;
这是一个 32 位带符号整数,它负责追踪模式更改。每当执行模式更改指令(例如,CREATE… 或 DROP…)时,此值会被递增。
secure_delete Pragma
secure_delete 编译指令用于控制如何删除数据库的内容。以下为简易句法。
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 编译指令用于将 SQL 跟踪结果转储到屏幕。以下为简易句法。
PRAGMA sql_trace;
PRAGMA sql_trace = [true|false];
SQLite 必须采用 SQLITE_DEBUG 指令进行编译才能包含此编译指令。
synchronous Pragma
synchronous 编译指令得到或设定当前磁盘同步模式,它控制了 SQLite 将数据写出到物理存储的积极程度。以下为简易句法。
PRAGMA [database.]synchronous;
PRAGMA [database.]synchronous = mode;
SQLite 支持表中列出的以下同步模式。
Sr.No. |
Pragma Value & Description |
1 |
0 or OFF 不进行同步 |
2 |
1 or NORMAL 在每次关键磁盘操作序列后进行同步 |
3 |
2 or FULL 在每次关键磁盘操作后进行同步 |
temp_store Pragma
temp_store 编译指令得到或设定临时数据库文件所使用的存储模式。以下为简易句法。
PRAGMA temp_store;
PRAGMA temp_store = mode;
SQLite 支持以下存储模式。
Sr.No. |
Pragma Value & Description |
1 |
0 or DEFAULT 使用编译时默认值。通常采用 FILE。 |
2 |
1 or FILE 使用文件存储。 |
3 |
2 or MEMORY 使用基于内存的存储。 |
temp_store_directory Pragma
temp_store_directory 编译指令得到或设定临时数据库文件使用的位置。以下为简易句法。
PRAGMA temp_store_directory;
PRAGMA temp_store_directory = 'directory_path';