「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 可以是以下任何一種:

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;

這里支持五種日志模式:

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

0 或 OFF 不進行同步。

1 或 NORMAL 在關鍵的磁盤操作的每個序列后同步。

2 或 FULL 在每個關鍵的磁盤操作后同步。

temp_store Pragma

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

PRAGMA temp_store;

PRAGMA temp_store = mode;

SQLite 支持下列存儲模式:

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

參考:http://www.w3cschool.cc/sqlite/sqlite-pragma.html


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內容

  • 隨著app信息量越來越大,每次從網絡獲取數據已經不是很可取的方案了,本地數據庫的運用已經越來越普遍了。而說道移動端...
    taosiyu閱讀 4,669評論 12 13
  • 這個SQLite快速入門教程教你如何有效地開始學習并使用SQLite。通過本教程的實踐操作學習之后,相信你應該可以...
    易百教程閱讀 36,057評論 1 67
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,674評論 25 708
  • ──18/2/2015,馬年的最後一天,任性地寫給自己。 「我們應該在天后下的。」非非說。 兩個小時之前,我和直系...
    咗噫小姐閱讀 391評論 2 1
  • 實習,你真的準備好了嗎? 萬事皆有取舍,選擇了實習,就有可能耽誤學業,這個沒有對錯之分,全取決于個人的選擇,但是一...
    p9x25s閱讀 7,035評論 43 378