1. 程式人生 > >sqlite3學習之PRAGMA 命令的使用

sqlite3學習之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;

上述程式碼中,mode 可以是以下任何一種:

Pragma 值 描述
0 或 NONE 禁用 Auto-vacuum。這是預設模式,意味著資料庫檔案尺寸大小不會縮小,除非手動使用 VACUUM 命令。
1 或 FULL 啟用 Auto-vacuum,是全自動的。在該模式下,允許資料庫檔案隨著資料從資料庫移除而縮小。
2 或 INCREMENTAL 啟用 Auto-vacuum,但是必須手動啟用。在該模式下,引用資料被維持,免費頁面只放在免費列表中。這些頁面可在任何時候使用 incremental_vacuum pragma
進行覆蓋。

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;

上述程式碼支援五種日誌模式,如下:

Pragma 值 描述
DELETE 預設模式。在該模式下,在事務結束時,日誌檔案將被刪除。
TRUNCATE 日誌檔案被階段為零位元組長度。
PERSIST 日誌檔案被留在原地,但頭部被重寫,表明日誌不再有效。
MEMORY 日誌記錄保留在記憶體中,而不是磁碟上。
OFF 不保留任何日誌記錄。

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 支援下列同步模式:

Pragma 值 描述
0 或 OFF 不進行同步。
1 或 NORMAL 在關鍵的磁碟操作的每個序列後同步。
2 或 FULL 在每個關鍵的磁碟操作後同步。

temp_store Pragma 獲取或設定臨時資料庫檔案所使用的儲存模式,語法如下 :

PRAGMA temp_store;
PRAGMA temp_store = mode;

SQLite 支援下列儲存模式:

Pragma 值 描述
0 或 DEFAULT 預設使用編譯時的模式。通常是 FILE。
1 或 FILE 使用基於檔案的儲存。
2 或 MEMORY 使用基於記憶體的儲存。

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 時要注意,因為它可能導致整個資料庫損壞。

好啦,本次記錄就到這裡了。

如果感覺不錯的話,請多多點贊支援哦。。。