📜  SQLite-PRAGMA

📅  最后修改于: 2021-01-04 05:03:16             🧑  作者: Mango


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;

其中模式可以是以下任何一种-

Sr.No. Pragma Value & Description
1

0 or NONE

Auto-vacuum is disabled. This is the default mode which means that a database file will never shrink in size unless it is manually vacuumed using the VACUUM command.

2

1 or FULL

Auto-vacuum is enabled and fully automatic which allows a database file to shrink as data is removed from the database.

3

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 pragma any time.

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 pragma获取或设置数据操作语句(如INSERT,UPDATE和DELETE)的返回值。以下是简单的语法。

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

默认情况下,此编译指示为false,并且这些语句不返回任何内容。如果设置为true,则每个提及的语句将返回一个单列单行表,该表由单个整数值组成,该整数值指示该操作所影响的行。

database_list语法

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

PRAGMA database_list;

该实用程序将返回一个三列的表,每个打开或连接的数据库都有一行,给出数据库序列号,其名称和关联的文件。

编码语用

编码编译指示控制如何对字符串进行编码和将其存储在数据库文件中。以下是简单的语法。

PRAGMA encoding;
PRAGMA encoding = format;

格式值可以是UTF-8,UTF-16leUTF-16be之一

freelist_count语法

freelist_count编译指示返回一个整数,该整数指示当前有多少个数据库页面被标记为空闲和可用。以下是简单的语法。

PRAGMA [database.]freelist_count;

格式值可以是UTF-8,UTF-16leUTF-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;

下表列出了五种受支持的日记模式。

Sr.No. Pragma Value & Description
1

DELETE

This is the default mode. Here at the conclusion of a transaction, the journal file is deleted.

2

TRUNCATE

The journal file is truncated to a length of zero bytes.

3

PERSIST

The journal file is left in place, but the header is overwritten to indicate the journal is no longer valid.

4

MEMORY

The journal record is held in memory, rather than on disk.

5

OFF

No journal record is kept.

max_page_count语法

max_page_count编译指示获取或设置数据库允许的最大页数。以下是简单的语法。

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

默认值为1,073,741,823,即一千兆页,这意味着,如果默认为1 KB页面大小,则数据库可以增长到一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,才能包含此编译指示。

同步语用

同步实用程序获取或设置当前磁盘同步模式,该模式控制SQLite将数据完全写入物理存储的积极程度。以下是简单的语法。

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

SQLite支持下表中列出的以下同步模式。

Sr.No. Pragma Value & Description
1

0 or OFF

No syncs at all

2

1 or NORMAL

Sync after each sequence of critical disk operations

3

2 or FULL

Sync after each critical disk operation

temp_store语法

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

PRAGMA temp_store;
PRAGMA temp_store = mode;

SQLite支持以下存储模式。

Sr.No. Pragma Value & Description
1

0 or DEFAULT

Use compile-time default. Normally FILE.

2

1 or FILE

Use file-based storage.

3

2 or MEMORY

Use memory-based storage.

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表。使用编译指示时请小心,因为它可能导致数据库完全损坏。