Latest web development tutorials

SQLite PRAGMA

SQLite的PRAGMA命令是一個特殊的命令,可以用在SQLite環境內控制各種環境變量和狀態標誌。 一個PRAGMA 值可以被讀取,也可以根據需求進行設置。

語法

要查詢當前的PRAGMA 值,只需要提供該pragma 的名字:

PRAGMA pragma_name;

要為PRAGMA 設置一個新的值,語法如下:

PRAGMA pragma_name = value;

設置模式,可以是名稱或等值的整數,但返回的值將始終是一個整數。

auto_vacuum Pragma

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

cache_size Pragma可獲取或暫時設置在內存中頁面緩存的最大尺寸。語法如下:

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

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_list Pragma將用於列出了所有的數據庫連接。語法如下:

PRAGMA database_list;

該Pragma 將返回一個單行三列的表格,每當打開或附加數據庫時,會給出數據庫中的序列號,它的名稱和相關的文件。

encoding Pragma

encoding 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;

這裡支持五種日誌模式:

Pragma 值描述
DELETE默认模式。在该模式下,在事务结束时,日志文件将被删除。
TRUNCATE日志文件被阶段为零字节长度。
PERSIST日志文件被留在原地,但头部被重写,表明日志不再有效。
MEMORY日志记录保留在内存中,而不是磁盘上。
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 的頁面大小,那麼數據庫中增長起來的一個兆字節。

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 或 OFF不进行同步。
1 或 NORMAL在关键的磁盘操作的每个序列后同步。
2 或 FULL在每个关键的磁盘操作后同步。

temp_store Pragma

temp_store Pragma獲取或設置臨時數據庫文件所使用的存儲模式。語法如下:

PRAGMA temp_store;
PRAGMA temp_store = mode;

SQLite 支持下列存儲模式:

Pragma 值描述
0 或 DEFAULT默认使用编译时的模式。通常是 FILE。
1 或 FILE使用基于文件的存储。
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 時要注意,因為它可能導致整個數據庫損壞。