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或NONE 自动清理被禁用。这是默认模式,这意味着除非使用VACUUM命令手动清理数据库文件,否则其大小将不会缩小。 |
2 | 1或FULL 自动清理已启用且完全自动化,允许数据库文件随着从数据库中删除的数据而缩小。 |
3 | 2或INCREMENTAL 自动清理已启用,但必须手动激活。在此模式下,保留引用数据,但空闲页只是放在空闲列表中。可以随时使用 incremental_vacuum pragma 恢复这些页面。 |
cache_size Pragma
cache_size 保留词可以获取或临时设置内存页面缓存的最大大小。以下是简单的语法。
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 database_list;
这个pragma将返回一个三列表格,每个开放或附加数据库都有一行,列出数据库的序号、名称和关联的文件。
encoding Pragma
编码 pragma 控制字符串在数据库文件中的编码和存储方式。下面是简单的语法。
PRAGMA encoding;
PRAGMA encoding = format;
格式值可以是以下之一: UTF-8, UTF-16le 或 UTF-16be 。
freelist_count Pragma
freelist_count 声明返回一个整数,表示当前标记为自由和可用的数据库页面数量。下面是简单的语法。
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;
下表列出了五种支持的日志模式。
序号 | 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,即一个Giga Page,这意味着如果默认的1 KB页面大小,数据库可以增长到一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
架构版本 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跟踪结果转储到屏幕的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 或 OFF 完全不进行同步 |
2 | 1 或 NORMAL 在每个关键磁盘操作序列之后进行同步 |
3 | 2 或 FULL 在每个关键磁盘操作之后进行同步 |
temp_store Pragma
temp_store 命令用于获取或设置临时数据库文件使用的存储模式。以下是简单的语法。
PRAGMA temp_store;
PRAGMA temp_store = mode;
SQLite支持以下存储模式。
序号 | Pragma值 & 描述 |
---|---|
1 | 0或DEFAULT 使用编译时默认值,通常为FILE。 |
2 | 1或FILE 使用基于文件的存储。 |
3 | 2或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];
如果设置了这个指示,可以创建和修改以sqlite_开头的表,包括sqlite_master表。使用指示时要小心,因为它可能导致完全的数据库损坏。