SQLite PRAGMA

2022-08-17 09:52 更新

SQLite 的 PRAGMA 命令是一個(gè)特殊的命令,可以用在 SQLite 環(huán)境內(nèi)控制各種環(huán)境變量和狀態(tài)標(biāo)志。一個(gè) PRAGMA 值可以被讀取,也可以根據(jù)需求進(jìn)行設(shè)置。

語(yǔ)法

要查詢當(dāng)前的 PRAGMA 值,只需要提供該 pragma 的名字:

PRAGMA pragma_name;

要為 PRAGMA 設(shè)置一個(gè)新的值,語(yǔ)法如下:

PRAGMA pragma_name = value;

設(shè)置模式,可以是名稱或等值的整數(shù),但返回的值將始終是一個(gè)整數(shù)。

auto_vacuum Pragma

auto_vacuum Pragma 獲取或設(shè)置 auto-vacuum 模式。語(yǔ)法如下:

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

其中,mode 可以是以下任何一種:

Pragma 值描述
0 或 NONE禁用 Auto-vacuum。這是默認(rèn)模式,意味著數(shù)據(jù)庫(kù)文件尺寸大小不會(huì)縮小,除非手動(dòng)使用 VACUUM 命令。
1 或 FULL啟用 Auto-vacuum,是全自動(dòng)的。在該模式下,允許數(shù)據(jù)庫(kù)文件隨著數(shù)據(jù)從數(shù)據(jù)庫(kù)移除而縮小。
2 或 INCREMENTAL啟用 Auto-vacuum,但是必須手動(dòng)激活。在該模式下,引用數(shù)據(jù)被維持,免費(fèi)頁(yè)面只放在免費(fèi)列表中。這些頁(yè)面可在任何時(shí)候使用 incremental_vacuum pragma 進(jìn)行覆蓋。

cache_size Pragma

cache_size Pragma 可獲取或暫時(shí)設(shè)置在內(nèi)存中頁(yè)面緩存的最大尺寸。語(yǔ)法如下:

PRAGMA [database.]cache_size;
PRAGMA [database.]cache_size = pages;

pages 值表示在緩存中的頁(yè)面數(shù)。內(nèi)置頁(yè)面緩存的默認(rèn)大小為 2,000 頁(yè),最小尺寸為 10 頁(yè)。

case_sensitive_like Pragma

case_sensitive_like Pragma 控制內(nèi)置的 LIKE 表達(dá)式的大小寫(xiě)敏感度。默認(rèn)情況下,該 Pragma 為 false,這意味著,內(nèi)置的 LIKE 操作符忽略字母的大小寫(xiě)。語(yǔ)法如下:

PRAGMA case_sensitive_like = [true|false];

目前沒(méi)有辦法查詢?cè)?Pragma 的當(dāng)前狀態(tài)。

count_changes Pragma

count_changes Pragma 獲取或設(shè)置數(shù)據(jù)操作語(yǔ)句的返回值,如 INSERT、UPDATE 和 DELETE。語(yǔ)法如下:

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

默認(rèn)情況下,該 Pragma 為 false,這些語(yǔ)句不返回任何東西。如果設(shè)置為 true,每個(gè)所提到的語(yǔ)句將返回一個(gè)單行單列的表,由一個(gè)單一的整數(shù)值組成,該整數(shù)表示操作影響的行。

database_list Pragma

database_list Pragma 將用于列出了所有的數(shù)據(jù)庫(kù)連接。語(yǔ)法如下:

PRAGMA database_list;

該 Pragma 將返回一個(gè)單行三列的表格,每當(dāng)打開(kāi)或附加數(shù)據(jù)庫(kù)時(shí),會(huì)給出數(shù)據(jù)庫(kù)中的序列號(hào),它的名稱和相關(guān)的文件。

encoding Pragma

encoding Pragma 控制字符串如何編碼及存儲(chǔ)在數(shù)據(jù)庫(kù)文件中。語(yǔ)法如下:

PRAGMA encoding;
PRAGMA encoding = format;

格式值可以是 UTF-8、UTF-16le 或 UTF-16be 之一。

freelist_count Pragma

freelist_count Pragma 返回一個(gè)整數(shù),表示當(dāng)前被標(biāo)記為免費(fèi)和可用的數(shù)據(jù)庫(kù)頁(yè)數(shù)。語(yǔ)法如下:

PRAGMA [database.]freelist_count;

格式值可以是 UTF-8、UTF-16le 或 UTF-16be 之一。

index_info Pragma

index_info Pragma 返回關(guān)于數(shù)據(jù)庫(kù)索引的信息。語(yǔ)法如下:

PRAGMA [database.]index_info( index_name );

結(jié)果集將為每個(gè)包含在給出列序列的索引、表格內(nèi)的列索引、列名稱的列顯示一行。

index_list Pragma

index_list Pragma 列出所有與表相關(guān)聯(lián)的索引。語(yǔ)法如下:

PRAGMA [database.]index_list( table_name );

結(jié)果集將為每個(gè)給出列序列的索引、索引名稱、表示索引是否唯一的標(biāo)識(shí)顯示一行。

journal_mode Pragma

journal_mode Pragma 獲取或設(shè)置控制日志文件如何存儲(chǔ)和處理的日志模式。語(yǔ)法如下::

PRAGMA journal_mode;
PRAGMA journal_mode = mode;
PRAGMA database.journal_mode;
PRAGMA database.journal_mode = mode;

這里支持五種日志模式:

Pragma 值描述
DELETE默認(rèn)模式。在該模式下,在事務(wù)結(jié)束時(shí),日志文件將被刪除。
TRUNCATE日志文件被階段為零字節(jié)長(zhǎng)度。
PERSIST日志文件被留在原地,但頭部被重寫(xiě),表明日志不再有效。
MEMORY日志記錄保留在內(nèi)存中,而不是磁盤(pán)上。
OFF不保留任何日志記錄。

max_page_count Pragma

max_page_count Pragma 為數(shù)據(jù)庫(kù)獲取或設(shè)置允許的最大頁(yè)數(shù)。語(yǔ)法如下:

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

默認(rèn)值是 1,073,741,823,這是一個(gè)千兆的頁(yè)面,即如果默認(rèn) 1 KB 的頁(yè)面大小,那么數(shù)據(jù)庫(kù)中增長(zhǎng)起來(lái)的一個(gè)兆字節(jié)。

page_count Pragma

page_count Pragma 返回當(dāng)前數(shù)據(jù)庫(kù)中的網(wǎng)頁(yè)數(shù)量。語(yǔ)法如下:

PRAGMA [database.]page_count;

數(shù)據(jù)庫(kù)文件的大小應(yīng)該是 page_count * page_size。

page_size Pragma

page_size Pragma 獲取或設(shè)置數(shù)據(jù)庫(kù)頁(yè)面的大小。語(yǔ)法如下:

PRAGMA [database.]page_size;
PRAGMA [database.]page_size = bytes;

默認(rèn)情況下,允許的尺寸是 512、1024、2048、4096、8192、16384、32768 字節(jié)。改變現(xiàn)有數(shù)據(jù)庫(kù)頁(yè)面大小的唯一方法就是設(shè)置頁(yè)面大小,然后立即 VACUUM 該數(shù)據(jù)庫(kù)。

parser_trace Pragma

parser_trace Pragma 隨著它解析 SQL 命令來(lái)控制打印的調(diào)試狀態(tài),語(yǔ)法如下:

PRAGMA parser_trace = [true|false];

默認(rèn)情況下,它被設(shè)置為 false,但設(shè)置為 true 時(shí)則啟用,此時(shí) SQL 解析器會(huì)隨著它解析 SQL 命令來(lái)打印出它的狀態(tài)。

recursive_triggers Pragma

recursive_triggers Pragma 獲取或設(shè)置遞歸觸發(fā)器功能。如果未啟用遞歸觸發(fā)器,一個(gè)觸發(fā)動(dòng)作將不會(huì)觸發(fā)另一個(gè)觸發(fā)。語(yǔ)法如下:

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

schema_version Pragma

schema_version Pragma 獲取或設(shè)置存儲(chǔ)在數(shù)據(jù)庫(kù)頭中的的架構(gòu)版本值。語(yǔ)法如下:

PRAGMA [database.]schema_version;
PRAGMA [database.]schema_version = number;

這是一個(gè) 32 位有符號(hào)整數(shù)值,用來(lái)跟蹤架構(gòu)的變化。每當(dāng)一個(gè)架構(gòu)改變命令執(zhí)行(比如 CREATE... 或 DROP...)時(shí),這個(gè)值會(huì)遞增。

secure_delete Pragma

secure_delete Pragma 用來(lái)控制內(nèi)容是如何從數(shù)據(jù)庫(kù)中刪除。語(yǔ)法如下:

PRAGMA secure_delete;
PRAGMA secure_delete = [true|false];
PRAGMA database.secure_delete;
PRAGMA database.secure_delete = [true|false];

安全刪除標(biāo)志的默認(rèn)值通常是關(guān)閉的,但是這是可以通過(guò) SQLITE_SECURE_DELETE 構(gòu)建選項(xiàng)來(lái)改變的。

sql_trace Pragma

sql_trace Pragma 用于把 SQL 跟蹤結(jié)果轉(zhuǎn)儲(chǔ)到屏幕上。語(yǔ)法如下:

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

SQLite 必須通過(guò) SQLITE_DEBUG 指令來(lái)編譯要引用的該 Pragma。

synchronous Pragma

synchronous Pragma 獲取或設(shè)置當(dāng)前磁盤(pán)的同步模式,該模式控制積極的 SQLite 如何將數(shù)據(jù)寫(xiě)入物理存儲(chǔ)。語(yǔ)法如下:

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

SQLite 支持下列同步模式:

Pragma 值描述
0 或 OFF不進(jìn)行同步。
1 或 NORMAL在關(guān)鍵的磁盤(pán)操作的每個(gè)序列后同步。
2 或 FULL在每個(gè)關(guān)鍵的磁盤(pán)操作后同步。

temp_store Pragma

temp_store Pragma 獲取或設(shè)置臨時(shí)數(shù)據(jù)庫(kù)文件所使用的存儲(chǔ)模式。語(yǔ)法如下:

PRAGMA temp_store;
PRAGMA temp_store = mode;

SQLite 支持下列存儲(chǔ)模式:

Pragma 值描述
0 或 DEFAULT默認(rèn)使用編譯時(shí)的模式。通常是 FILE。
1 或 FILE使用基于文件的存儲(chǔ)。
2 或 MEMORY使用基于內(nèi)存的存儲(chǔ)。

temp_store_directory Pragma

temp_store_directory Pragma 獲取或設(shè)置用于臨時(shí)數(shù)據(jù)庫(kù)文件的位置。語(yǔ)法如下:

PRAGMA temp_store_directory;
PRAGMA temp_store_directory = 'directory_path';

user_version Pragma

user_version Pragma 獲取或設(shè)置存儲(chǔ)在數(shù)據(jù)庫(kù)頭的用戶自定義的版本值。語(yǔ)法如下:

PRAGMA [database.]user_version;
PRAGMA [database.]user_version = number;

這是一個(gè) 32 位的有符號(hào)整數(shù)值,可以由開(kāi)發(fā)人員設(shè)置,用于版本跟蹤的目的。

writable_schema Pragma

writable_schema Pragma 獲取或設(shè)置是否能夠修改系統(tǒng)表。語(yǔ)法如下:

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

如果設(shè)置了該 Pragma,則表以 sqlite_ 開(kāi)始,可以創(chuàng)建和修改,包括 sqlite_master 表。使用該 Pragma 時(shí)要注意,因?yàn)樗赡軐?dǎo)致整個(gè)數(shù)據(jù)庫(kù)損壞。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)