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;
其中,mode 可以是以下任何一種:
cache_size Pragma 可獲取或暫時設置在內存中頁面緩存的最大尺寸。語法如下:
PRAGMA [database.]cache_size; PRAGMA [database.]cache_size = pages;
pages 值表示在緩存中的頁面數。內置頁面緩存的默認大小為 2,000 頁,最小尺寸為 10 頁。
case_sensitive_like Pragma 控制內置的 LIKE 表達式的大小寫敏感度。默認情況下,該 Pragma 為 false,這意味著,內置的 LIKE 操作符忽略字母的大小寫。語法如下:
PRAGMA case_sensitive_like = [true|false];
目前沒有辦法查詢該 Pragma 的當前狀態。
count_changes Pragma 獲取或設置數據操作語句的返回值,如 INSERT、UPDATE 和 DELETE。語法如下:
PRAGMA count_changes; PRAGMA count_changes = [true|false];
默認情況下,該 Pragma 為 false,這些語句不返回任何東西。如果設置為 true,每個所提到的語句將返回一個單行單列的表,由一個單一的整數值組成,該整數表示操作影響的行。
database_list Pragma 將用於列出了所有的數據庫連接。語法如下:
PRAGMA database_list;
該 Pragma 將返回一個單行三列的表格,每當打開或附加數據庫時,會給出數據庫中的序列號,它的名稱和相關的文件。
encoding Pragma 控制字符串如何編碼及存儲在數據庫文件中。語法如下:
PRAGMA encoding; PRAGMA encoding = format;
格式值可以是 UTF-8、UTF-16le 或 UTF-16be 之一。
freelist_count Pragma 返回一個整數,表示當前被標記為免費和可用的數據庫頁數。語法如下:
PRAGMA [database.]freelist_count;
格式值可以是 UTF-8、UTF-16le 或 UTF-16be 之一。
index_info Pragma 返回關於數據庫索引的信息。語法如下:
PRAGMA [database.]index_info( index_name );
結果集將為每個包含在給出列序列的索引、表格內的列索引、列名稱的列顯示一行。
index_list Pragma 列出所有與表相關聯的索引。語法如下:
PRAGMA [database.]index_list( table_name );
結果集將為每個給出列序列的索引、索引名稱、表示索引是否唯一的標識顯示一行。
journal_mode Pragma 獲取或設置控制日志文件如何存儲和處理的日志模式。語法如下::
PRAGMA journal_mode; PRAGMA journal_mode = mode; PRAGMA database.journal_mode; PRAGMA database.journal_mode = mode;
這裡支持五種日志模式:
max_page_count Pragma 為數據庫獲取或設置允許的最大頁數。語法如下:
PRAGMA [database.]max_page_count; PRAGMA [database.]max_page_count = max_page;
默認值是 1,073,741,823,這是一個千兆的頁面,即如果默認 1 KB 的頁面大小,那麼數據庫中增長起來的一個兆字節。
page_count Pragma 返回當前數據庫中的網頁數量。語法如下:
PRAGMA [database.]page_count;
數據庫文件的大小應該是 page_count * page_size。
page_size Pragma 獲取或設置數據庫頁面的大小。語法如下:
PRAGMA [database.]page_size; PRAGMA [database.]page_size = bytes;
默認情況下,允許的尺寸是 512、1024、2048、4096、8192、16384、32768 字節。改變現有數據庫頁面大小的唯一方法就是設置頁面大小,然後立即 VACUUM 該數據庫。
parser_trace Pragma 隨著它解析 SQL 命令來控制打印的調試狀態,語法如下:
PRAGMA parser_trace = [true|false];
默認情況下,它被設置為 false,但設置為 true 時則啟用,此時 SQL 解析器會隨著它解析 SQL 命令來打印出它的狀態。
recursive_triggers Pragma 獲取或設置遞歸觸發器功能。如果未啟用遞歸觸發器,一個觸發動作將不會觸發另一個觸發。語法如下:
PRAGMA recursive_triggers; PRAGMA recursive_triggers = [true|false];
schema_version Pragma 獲取或設置存儲在數據庫頭中的的架構版本值。語法如下:
PRAGMA [database.]schema_version; PRAGMA [database.]schema_version = number;
這是一個 32 位有符號整數值,用來跟蹤架構的變化。每當一個架構改變命令執行(比如 CREATE... 或 DROP...)時,這個值會遞增。
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 跟蹤結果轉儲到屏幕上。語法如下:
PRAGMA sql_trace; PRAGMA sql_trace = [true|false];
SQLite 必須通過 SQLITE_DEBUG 指令來編譯要引用的該 Pragma。
synchronous Pragma 獲取或設置當前磁盤的同步模式,該模式控制積極的 SQLite 如何將數據寫入物理存儲。語法如下:
PRAGMA [database.]synchronous; PRAGMA [database.]synchronous = mode;
SQLite 支持下列同步模式:
temp_store Pragma 獲取或設置臨時數據庫文件所使用的存儲模式。語法如下:
PRAGMA temp_store; PRAGMA temp_store = mode;
SQLite 支持下列存儲模式:
temp_store_directory Pragma 獲取或設置用於臨時數據庫文件的位置。語法如下:
PRAGMA temp_store_directory; PRAGMA temp_store_directory = 'directory_path';
user_version Pragma 獲取或設置存儲在數據庫頭的用戶自定義的版本值。語法如下:
PRAGMA [database.]user_version; PRAGMA [database.]user_version = number;
這是一個 32 位的有符號整數值,可以由開發人員設置,用於版本跟蹤的目的。
writable_schema Pragma 獲取或設置是否能夠修改系統表。語法如下:
PRAGMA writable_schema; PRAGMA writable_schema = [true|false];
如果設置了該 Pragma,則表以 sqlite_ 開始,可以創建和修改,包括 sqlite_master 表。使用該 Pragma 時要注意,因為它可能導致整個數據庫損壞。