SQLite PRAGMA
SQLite PRAGMA 命令是一个特殊命令,用于控制SQLite环境中的各种环境变量和状态标志。可以读取PRAGMA值,也可以根据要求进行设置。
语法
要查询当前的PRAGMA值,只需提供编译指示的名称即可。
PRAGMA pragma_name;
要为PRAGMA设置新值,请使用以下语法。
PRAGMA pragma_name = value;
设置模式可以是名称,也可以是等效的整数,但是返回的值始终是整数。
auto_vacuum语法
auto_vacuum编译指示获取或设置自动真空模式,以下是简单的语法。
PRAGMA [database.]auto_vacuum; PRAGMA [database.]auto_vacuum = mode;
mode可以是以下任意一种:
序号. | 语用价值和说明 |
---|---|
1 | 0 或者 NONE 自动真空已禁用。这是默认模式,这意味着除非使用VACUUM命令手动对其进行清理,否则数据库文件的大小将永远不会缩小。 |
2 | 1 或者 FULL 启用了自动真空并且它是全自动的,当从数据库中删除数据时,它允许数据库文件缩小。 |
3 | 2 或者 INCREMENTAL 自动真空已启用,但必须手动激活。在这种模式下,将保留参考数据,但是将空闲页面简单地放在空闲列表中。这些页面可以使用incremental_vacuum pragma任何时间。 |
cache_size语法
cache_size编译指示可以获取或临时设置内存中页面缓存的最大大小,以下是简单的语法。
PRAGMA [database.]cache_size; PRAGMA [database.]cache_size = pages;
pages值表示高速缓存中的页面数。内置页面缓存的默认大小为2,000页,最小大小为10页。
case_sensitive_like语法
case_sensitive_like编译指示控制内置LIKE表达式的区分大小写。默认情况下,此编译指示为false,这意味着内置的LIKE运算符将忽略字母大小写。以下是简单的语法。
PRAGMA case_sensitive_like = [true|false];
无法查询此编译指示的当前状态。
count_changes语法
count_changes语法获取或设置数据操作语句(例如INSERT,UPDATE和DELETE)的返回值,以下是简单的语法。
PRAGMA count_changes; PRAGMA count_changes = [true|false];
默认情况下,此编译指示为false,并且这些语句不返回任何内容。如果设置为true,则每个提及的语句将返回一个单列单行表,该表由单个整数值组成,该整数值指示该操作所影响的行。
database_list语法
database_list编译指示将用于列出所有附加数据库,以下是简单的语法。
PRAGMA database_list;
该实用程序将返回一个三列表,每个打开或连接的数据库都有一行,给出数据库序列号,其名称和关联的文件。
encoding语法
encoding编译指示控制如何对字符串进行编码和将其存储在数据库文件中,以下是简单的语法。
PRAGMA encoding; PRAGMA encoding = format;
格式值可以是以下之一UTF-8,UTF-16le,或者UTF-16be。
freelist_count语法
freelist_count语法返回一个整数,该整数指示当前有多少个数据库页面被标记为空闲和可用,以下是简单的语法。
PRAGMA [database.]freelist_count;
格式值可以是以下之一UTF-8,UTF-16le,或者UTF-16be。
index_info语法
index_info语法返回有关数据库索引的信息,以下是简单的语法。
PRAGMA [database.]index_info( index_name );
结果集将为索引中包含的每一列包含一行,以给出列顺序,表中包含列索引和列名。
index_list语法
index_list语法列出与表关联的所有索引,以下是简单的语法。
PRAGMA [database.]index_list( table_name );
结果集将为每个索引包含一行,提供索引序列,索引名称和指示索引是否唯一的标志。
journal_mode语法
journal_mode语法获取或设置日记模式,该模式控制日记文件的存储和处理方式,以下是简单的语法。
PRAGMA journal_mode; PRAGMA journal_mode = mode; PRAGMA database.journal_mode; PRAGMA database.journal_mode = mode;
下表列出了五种受支持的日记模式。
序号. | 语法值和说明 |
---|---|
1 | DELETE 这是默认模式。在交易结束时,日记文件被删除。 |
2 | TRUNCATE 日志文件被截断为零字节的长度。 |
3 | PERSIST 日记文件保留在原处,但是标题被覆盖以指示日记不再有效。 |
4 | MEMORY 日记记录保存在内存中,而不是磁盘上。 |
5 | OFF 不保留日记记录。 |
max_page_count语法
max_page_count语法获取或设置数据库允许的最大页数,以下是简单的语法。
PRAGMA [database.]max_page_count; PRAGMA [database.]max_page_count = max_page;
默认值为1,073,741,823,即一个千兆页,这意味着,如果默认为1 KB页面大小,则数据库可以增长到1 TB。
page_count语法
page_count语法返回数据库中当前的页数,以下是简单的语法:
PRAGMA [database.]page_count;
数据库文件的大小应为page_count * page_size。
page_size语法
page_size语法获取或设置数据库页面的大小,以下是简单的语法。
PRAGMA [database.]page_size; PRAGMA [database.]page_size = bytes;
默认情况下,允许的大小为512、1024、2048、4096、8192、16384和32768字节。更改现有数据库上页面大小的唯一方法是设置页面大小,然后立即对数据库进行VACUUM。
parser_trace语法
parser_trace编译指示在分析SQL命令时打印调试状态,以下是简单的语法。
PRAGMA parser_trace = [true|false];
默认情况下,它设置为false,但是当通过将其设置为true启用时,SQL解析器将在解析SQL命令时打印其状态。
recursive_triggers语法
recursive_triggers编译指示获取或设置递归触发器功能。如果未启用递归触发器,则触发器操作将不会触发另一个触发器,以下是简单的语法。
PRAGMA recursive_triggers; PRAGMA recursive_triggers = [true|false];
schema_version语法
schema_version语法获取或设置存储在数据库头中的架构版本值,以下是简单的语法。
PRAGMA [database.]schema_version; PRAGMA [database.]schema_version = number;
这是一个32位带符号整数值,用于跟踪架构更改。每当执行更改模式的命令(例如CREATE ...或DROP ...)时,此值都会增加。
secure_delete语法
secure_delete编译指示用于控制如何从数据库中删除内容,以下是简单的语法。
PRAGMA secure_delete; PRAGMA secure_delete = [true|false]; PRAGMA database.secure_delete; PRAGMA database.secure_delete = [true|false];
安全删除标志的默认值通常为off,但是可以使用SQLITE_SECURE_DELETE构建选项更改该默认值。
sql_trace语法
sql_trace编译指示用于将SQL跟踪结果转储到屏幕上,以下是简单的语法。
PRAGMA sql_trace; PRAGMA sql_trace = [true|false];
必须使用SQLITE_DEBUG指令编译SQLite,才能包含此编译指示。
synchronous语法
synchronous语法获取或设置当前的磁盘同步模式,该模式控制SQLite将数据完全写入物理存储的积极程度,以下是简单的语法。
PRAGMA [database.]synchronous; PRAGMA [database.]synchronous = mode;
SQLite支持下表中列出的以下同步模式。
序号. | 语用价值和说明 |
---|---|
1 | 0 或者 OFF 完全没有同步 |
2 | 1 或者 NORMAL 在每个关键磁盘操作序列之后进行同步 |
3 | 2 或者 FULL 每次关键磁盘操作后进行同步 |
temp_store语法
temp_store语法获取或设置临时数据库文件使用的存储模式。以下是简单的语法。
PRAGMA temp_store; PRAGMA temp_store = mode;
SQLite支持以下存储模式。
序号. | 语用价值和说明 |
---|---|
1 | 0或DEFAULT 使用编译时默认值。通常是FILE。 |
2 | 1或FILE 使用基于文件的存储。 |
3 | 2或MEMORY 使用基于内存的存储。 |
temp_store_directory语法
temp_store_directory语法获取或设置用于临时数据库文件的位置。以下是简单的语法。
PRAGMA temp_store_directory; PRAGMA temp_store_directory = 'directory_path';
user_version语法
user_version语法获取或设置存储在数据库头中的用户定义的版本值。以下是简单的语法。
PRAGMA [database.]user_version; PRAGMA [database.]user_version = number;
这是一个32位带符号整数值,开发人员可以出于版本跟踪目的设置该值。
writable_schema语法
writable_schema编译指示获取或设置修改系统表的能力。以下是简单的语法。
PRAGMA writable_schema; PRAGMA writable_schema = [true|false];
如果设置了此编译指示,则可以创建和修改以sqlite_开头的表,包括sqlite_master表。使用编译指示时请格外小心,因为它可能导致数据库完全损坏。