
- SQLite 教程
- SQLite - 首頁
- SQLite - 概述
- SQLite - 安裝
- SQLite - 命令
- SQLite - 語法
- SQLite - 資料型別
- SQLite - 建立資料庫
- SQLite - 附加資料庫
- SQLite - 分離資料庫
- SQLite - 建立表
- SQLite - 刪除表
- SQLite - INSERT 查詢
- SQLite - SELECT 查詢
- SQLite - 運算子
- SQLite - 表示式
- SQLite - WHERE 子句
- SQLite - AND & OR 子句
- SQLite - UPDATE 查詢
- SQLite - DELETE 查詢
- SQLite - LIKE 子句
- SQLite - GLOB 子句
- SQLite - LIMIT 子句
- SQLite - ORDER By 子句
- SQLite - GROUP By 子句
- SQLite - HAVING 子句
- SQLite - DISTINCT 關鍵字
- 高階 SQLite
- SQLite - PRAGMA 命令
- SQLite - 約束
- SQLite - 連線
- SQLite - UNIONS 子句
- SQLite - NULL 值
- SQLite - 別名語法
- SQLite - 觸發器
- SQLite - 索引
- SQLite - INDEXED By 子句
- SQLite - ALTER 命令
- SQLite - TRUNCATE 命令
- SQLite - 檢視
- SQLite - 事務
- SQLite - 子查詢
- SQLite - AUTOINCREMENT
- SQLite - 注入
- SQLite - EXPLAIN
- SQLite - VACUUM
- SQLite - 日期和時間
- SQLite - 有用函式
- SQLite 有用資源
- SQLite - 快速指南
- SQLite - 有用資源
- SQLite - 討論
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-16le或UTF-16be之一。
freelist_count Pragma
freelist_count pragma 返回一個表示當前標記為可用空閒的資料庫頁面數量的單個整數。以下是簡單的語法。
PRAGMA [database.]freelist_count;
format 值可以是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;
下表列出了五種支援的日誌模式。
序號 | 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 時要小心,因為它可能導致資料庫完全損壞。