SQLite - PRAGMA 命令



SQLite 的PRAGMA 命令是一個特殊的命令,用於控制 SQLite 環境中的各種環境變數和狀態標誌。可以讀取 PRAGMA 值,也可以根據需要設定 PRAGMA 值。

語法

要查詢當前的 PRAGMA 值,只需提供 pragma 的名稱。

PRAGMA pragma_name;

要為 PRAGMA 設定新值,請使用以下語法。

PRAGMA pragma_name = value;

設定模式可以是名稱或整數等效值,但返回值始終為整數。

auto_vacuum Pragma

auto_vacuum pragma 獲取或設定自動真空模式。以下是簡單的語法。

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

其中mode可以是以下任何一個:

序號 Pragma 值 & 描述
1

0 或 NONE

停用自動真空。這是預設模式,這意味著資料庫檔案的大小永遠不會縮小,除非使用 VACUUM 命令手動進行真空操作。

2

1 或 FULL

啟用自動真空並使其完全自動,允許資料庫檔案在從資料庫中刪除資料時縮小。

3

2 或 INCREMENTAL

啟用自動真空,但必須手動啟用。在此模式下,維護引用資料,但空閒頁面僅放在空閒列表中。可以使用incremental_vacuum pragma隨時恢復這些頁面。

cache_size Pragma

cache_size pragma 可以獲取或臨時設定記憶體中頁面快取的最大大小。以下是簡單的語法。

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

pages值表示快取中的頁面數。內建頁面快取的預設大小為 2000 個頁面,最小大小為 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_list pragma 用於列出所有附加的資料庫。以下是簡單的語法。

PRAGMA database_list;

此 pragma 將返回一個三列表,每行對應一個開啟或附加的資料庫,給出資料庫序列號、其名稱和關聯的檔案。

encoding Pragma

encoding pragma 控制字串如何在資料庫檔案中編碼和儲存。以下是簡單的語法。

PRAGMA encoding;
PRAGMA encoding = format;

format 值可以是UTF-8、UTF-16leUTF-16be之一。

freelist_count Pragma

freelist_count pragma 返回一個表示當前標記為可用空閒的資料庫頁面數量的單個整數。以下是簡單的語法。

PRAGMA [database.]freelist_count;

format 值可以是UTF-8、UTF-16leUTF-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;

下表列出了五種支援的日誌模式。

序號 Pragma 值 & 描述
1

DELETE

這是預設模式。在此模式下,在事務結束時,將刪除日誌檔案。

2

TRUNCATE

日誌檔案將截斷為零位元組長度。

3

PERSIST

日誌檔案將保留在原處,但標題將被覆蓋以指示日誌不再有效。

4

MEMORY

日誌記錄儲存在記憶體中,而不是磁碟上。

5

OFF

不保留日誌記錄。

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,則允許資料庫增長到 1 TB。

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 值 & 描述
1

0 或 OFF

根本不進行同步

2

1 或 NORMAL

在每個關鍵磁碟操作序列後同步

3

2 或 FULL

在每個關鍵磁碟操作後同步

temp_store Pragma

temp_store pragma 獲取或設定臨時資料庫檔案使用的儲存模式。以下是簡單的語法。

PRAGMA temp_store;
PRAGMA temp_store = mode;

SQLite 支援以下儲存模式。

序號 Pragma 值 & 描述
1

0 或 DEFAULT

使用編譯時預設值。通常為 FILE。

2

1 或 FILE

使用基於檔案的儲存。

3

2 或 MEMORY

使用基於記憶體的儲存。

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

廣告