位置:首页 > 数据库 > SQLite教程 > SQLite PRAGMA

SQLite PRAGMA

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

语法

要查询当前的pragma值,只需要提供该pragma的名字:

PRAGMA pragma_name;

为PRAGMA要设置一个新的值,使用以下语法:

PRAGMA pragma_name = value;

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

auto_vacuum Pragma

auto_vacuum编译指示获取或设置自动真空模式。以下是简单的语法:

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

模式可以是以下任何一种:

pragma值 描述
0 or NONE Auto-vacuum is disabled. This is default mode which means that a database file will never shrink in size unless it is manually vacuumed using the VACUUM command.
1 or FULL Auto-vacuum is enabled and fully automatic which allows a database file to shrink as data is removed from the database.
2 or INCREMENTAL Auto-vacuum is enabled but must be manually activated. In this mode the reference data is maintained, but free pages are simply put on the free list. These pages can be recovered using the incremental_vacuum pragmaany time.

cache_size Pragma

将cache_size pragma 可以得到或暂时设置在内存中的页面缓存的最大大小。以下是简单的语法:

PRAGMA [database.]cache_size; PRAGMA [database.]cache_size = 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];

默认情况下,该pragma为false,这些语句不返回任何东西。如果设置为true,每个所提到的语句将返回一列,一列的表,由一个单一的整数值,表示操作影响的行。

database_list Pragma

database_listpragma 将用于列出了所有的数据库连接。以下是简单的语法:

PRAGMA database_list;

该pragma将返回与开放或附加的数据库,数据库中的序列号,它的名字和文件相关的一列,每一个三列的表。

encoding Pragma

编码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;

支持journal 模式有五种:

Pragma 值 描述
DELETE This is default mode. Here at the conclusion of a transaction, the journal file is deleted.
TRUNCATE The journal file is truncated to a length of zero bytes.
PERSIST The journal file is left in place, but the header is overwritten to indicate the journal is no longer valid.
MEMORY The journal record is held in memory, rather than on disk.
OFF No journal record is kept.

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的页面大小,这使得数据库中增长起来的一个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解析器会打印出它的状态,因为它解析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 值 描述
0 or OFF No syncs at all
1 or NORMAL Sync after each sequence of critical disk operations
2 or FULL Sync after each critical disk operation

temp_store Pragma

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

PRAGMA temp_store; PRAGMA temp_store = mode;

SQLite支持以下存储模式:

Pragma 值 描述
0 or DEFAULT Use compile-time default. Normally FILE.
1 or FILE Use file-based storage.
2 or MEMORY Use memory-based storage.

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