SQLite PRAGMA命令是一個(gè)特殊的命令,用于控制SQLite環(huán)境中的各種環(huán)境變量和狀態(tài)標(biāo)志。PRAGMA值可以讀取,也可以根據(jù)需要進(jìn)行設(shè)置。
要查詢當(dāng)前的PRAGMA值,只需提供編譯指示的名稱。
PRAGMA pragma_name;
要為PRAGMA設(shè)置新值,請(qǐng)使用以下語法。
PRAGMA pragma_name = value;
設(shè)置模式可以是名稱,也可以是等效的整數(shù),但是返回的值始終是整數(shù)。
auto_vacuum PRAGMA獲取或設(shè)置自動(dòng)真空模式。以下是簡單的語法。
PRAGMA [database.]auto_vacuum; PRAGMA [database.]auto_vacuum = mode;
以下何處mode可以-
序號(hào) | PRAGMA值和說明 |
---|---|
1 | 0 or NONE Auto-vacuum已禁用。這是默認(rèn)模式,這意味著除非使用VACUUM命令手動(dòng)對(duì)其進(jìn)行清理,否則數(shù)據(jù)庫文件的大小永遠(yuǎn)不會(huì)縮小。 |
2 | 1 or FULL 啟用了Auto-vacuum并且它是全自動(dòng)的,當(dāng)從數(shù)據(jù)庫中刪除數(shù)據(jù)時(shí),它允許數(shù)據(jù)庫文件縮小。 |
3 | 2 or INCREMENTAL Auto-vacuum已啟用,但必須手動(dòng)激活。在這種模式下,將保留參考數(shù)據(jù),但是將空閑頁面簡單地放在空閑列表中。這些頁面可以隨時(shí)使用incremental_vacuum pragma。 |
cache_size編譯可以得到或暫時(shí)設(shè)置在內(nèi)存中的頁面緩存的最大尺寸。以下是簡單的語法。
PRAGMA [database.]cache_size; PRAGMA [database.]cache_size = pages;
pages值表示高速緩存中的頁面數(shù)。內(nèi)置頁面緩存的默認(rèn)大小為2,000頁,最小大小為10頁。
case_sensitive_like pragma控制內(nèi)置LIKE表達(dá)式的大小寫敏感。默認(rèn)情況下,此pragma為false,這意味著內(nèi)置的LIKE運(yùn)算符忽略字母大小寫。下面是簡單的語法。
PRAGMA case_sensitive_like = [true|false];
無法查詢此編譯指示的當(dāng)前狀態(tài)。
count_changes pragma獲取或設(shè)置數(shù)據(jù)操作語句(例如INSERT,UPDATE和DELETE)的返回值。以下是簡單的語法。
PRAGMA count_changes; PRAGMA count_changes = [true|false];
默認(rèn)情況下,此編譯指示為false,并且這些語句不返回任何內(nèi)容。如果設(shè)置為true,則每個(gè)提及的語句將返回一個(gè)單列單行表,該表由單個(gè)整數(shù)值組成,該整數(shù)值指示該操作所影響的行。
database_list實(shí)用程序?qū)⒂糜诹谐鏊懈郊訑?shù)據(jù)庫。以下是簡單的語法。
PRAGMA database_list;
該實(shí)用程序?qū)⒎祷匾粋€(gè)三列的表,每個(gè)打開或連接的數(shù)據(jù)庫都有一行,給出數(shù)據(jù)庫序列號(hào),其名稱和關(guān)聯(lián)的文件。
encoding pragma控制字符串是如何編碼,并存儲(chǔ)在數(shù)據(jù)庫中的文件。以下是簡單的語法。
PRAGMA encoding; PRAGMA encoding = format;
格式值可以是UTF-8, UTF-16le或UTF-16be之一。
freelist_count Pragma返回一個(gè)整數(shù),表示許多數(shù)據(jù)庫頁當(dāng)前如何標(biāo)記為空閑和可用的。以下是簡單的語法。
PRAGMA [database.]freelist_count;
格式值可以是UTF-8, UTF-16le或UTF-16be之一。
index_info Pragma返回有關(guān)數(shù)據(jù)庫索引的信息。以下是簡單的語法。
PRAGMA [database.]index_info( index_name );
結(jié)果集將為索引中包含的每一列包含一行,以給出列順序,表中包含列索引和列名。
index_list Pragma列出與表關(guān)聯(lián)的所有索引。以下是簡單的語法。
PRAGMA [database.]index_list( table_name );
結(jié)果集將為每個(gè)索引包含一行,從而提供索引序列,索引名稱和指示索引是否唯一的標(biāo)志。
journal_mode Pragma獲取或設(shè)置控制日志文件如何存儲(chǔ)和處理的日志模式。以下是簡單的語法。
PRAGMA journal_mode; PRAGMA journal_mode = mode; PRAGMA database.journal_mode; PRAGMA database.journal_mode = mode;
下表列出了五種受支持的日記模式。
序號(hào) | Pragma 值和說明 |
---|---|
1 | DELETE 這是默認(rèn)模式。在交易結(jié)束時(shí),日記文件被刪除。 |
2 | TRUNCATE 日志文件被截?cái)酁榱阕止?jié)的長度。 |
3 | PERSIST 日記文件保留在原處,但是標(biāo)題被覆蓋以指示日記不再有效。 |
4 | MEMORY 日記記錄保存在內(nèi)存中,而不是磁盤上。 |
5 | OFF 不保留日記記錄。 |
max_page_count PRAGMA獲取或設(shè)置允許的最大頁數(shù)為數(shù)據(jù)庫。以下是簡單的語法。
PRAGMA [database.]max_page_count; PRAGMA [database.]max_page_count = max_page;
默認(rèn)值為1,073,741,823,即一個(gè)千兆頁,這意味著,如果默認(rèn)為1 KB頁面大小,則數(shù)據(jù)庫可以增長到1 TB。
page_count PRAGMA返回的數(shù)據(jù)庫的當(dāng)前頁數(shù)。以下是簡單的語法-
PRAGMA [database.]page_count;
數(shù)據(jù)庫文件的大小應(yīng)為page_count * page_size。
page_size PRAGMA獲取或設(shè)置數(shù)據(jù)庫頁面的大小。以下是簡單的語法。
PRAGMA [database.]page_size; PRAGMA [database.]page_size = bytes;
默認(rèn)情況下,允許的大小為512、1024、2048、4096、8192、16384和32768字節(jié)。更改現(xiàn)有數(shù)據(jù)庫上頁面大小的唯一方法是設(shè)置頁面大小,然后立即對(duì)數(shù)據(jù)庫進(jìn)行VACUUM。
parser_trace PRAGMA指示控制打印調(diào)試狀態(tài),因?yàn)樗馕鯯QL命令。以下是簡單的語法。
PRAGMA parser_trace = [true|false];
默認(rèn)情況下,它設(shè)置為false,但是當(dāng)通過將其設(shè)置為true啟用時(shí),SQL解析器將在解析SQL命令時(shí)打印其狀態(tài)。
recursive_triggers PRAGMA獲取或設(shè)置遞歸觸發(fā)功能。如果未啟用遞歸觸發(fā)器,則觸發(fā)器操作將不會(huì)觸發(fā)另一個(gè)觸發(fā)器。以下是簡單的語法。
PRAGMA recursive_triggers; PRAGMA recursive_triggers = [true|false];
schema_version PRAGMA獲取或設(shè)置存儲(chǔ)在數(shù)據(jù)庫頭架構(gòu)版本值。以下是簡單的語法。
PRAGMA [database.]schema_version; PRAGMA [database.]schema_version = number;
這是一個(gè)32位帶符號(hào)整數(shù)值,用于跟蹤架構(gòu)更改。每當(dāng)執(zhí)行更改模式的命令(例如CREATE ...或DROP ...)時(shí),此值都會(huì)增加。
secure_delete PRAGMA用于控制如何將內(nèi)容從數(shù)據(jù)庫中刪除。以下是簡單的語法。
PRAGMA secure_delete; PRAGMA secure_delete = [true|false]; PRAGMA database.secure_delete; PRAGMA database.secure_delete = [true|false];
安全刪除標(biāo)志的默認(rèn)值通常為off,但是可以使用SQLITE_SECURE_DELETE構(gòu)建選項(xiàng)更改該默認(rèn)值。
sql_trace PRAGMA用于轉(zhuǎn)儲(chǔ)SQL跟蹤結(jié)果到屏幕上。以下是簡單的語法。
PRAGMA sql_trace; PRAGMA sql_trace = [true|false];
必須使用SQLITE_DEBUG指令編譯SQLite,才能包含此編譯指示。
synchronous PRAGMA獲取或設(shè)置當(dāng)前磁盤同步模式,控制如何積極的SQLite將一路寫數(shù)據(jù)到物理存儲(chǔ)。以下是簡單的語法。
PRAGMA [database.]synchronous; PRAGMA [database.]synchronous = mode;
SQLite支持下表中列出的以下同步模式。
序號(hào) | Pragma 值和說明 |
---|---|
1 | 0 or OFF 完全沒有同步 |
2 | 1 or NORMAL 在每個(gè)關(guān)鍵磁盤操作序列之后進(jìn)行同步 |
3 | 2 or FULL 每次關(guān)鍵磁盤操作后同步 |
temp_store PRAGMA獲取或設(shè)置臨時(shí)數(shù)據(jù)庫文件所使用的存儲(chǔ)模式。以下是簡單的語法。
PRAGMA temp_store; PRAGMA temp_store = mode;
SQLite支持以下存儲(chǔ)模式。
序號(hào) | Pragma 值和說明 |
---|---|
1 | 0 or DEFAULT 使用編譯時(shí)默認(rèn)值。通常是FILE。 |
2 | 1 or FILE 使用基于文件的存儲(chǔ)。 |
3 | 2 or MEMORY 使用基于內(nèi)存的存儲(chǔ)。 |
temp_store_directory PRAGMA獲取或設(shè)置用于臨時(shí)數(shù)據(jù)庫文件的位置。以下是簡單的語法。
PRAGMA temp_store_directory; PRAGMA temp_store_directory = 'directory_path';
user_version編譯指示獲取或設(shè)置存儲(chǔ)在數(shù)據(jù)庫頭中的用戶定義的版本值。以下是簡單的語法。
PRAGMA [database.]user_version; PRAGMA [database.]user_version = number;
這是一個(gè)32位帶符號(hào)整數(shù)值,開發(fā)人員可以出于版本跟蹤目的設(shè)置該值。
writable_schema編譯獲取或設(shè)置修改系統(tǒng)表的能力。以下是簡單的語法。
PRAGMA writable_schema; PRAGMA writable_schema = [true|false];
如果設(shè)置了此編譯指示,則可以創(chuàng)建和修改以sqlite_開頭的表,包括sqlite_master表。使用編譯指示時(shí)請(qǐng)小心,因?yàn)樗赡軐?dǎo)致數(shù)據(jù)庫完全損壞。