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時要小心,因為它可能導致完成數據庫損壞。