SQLite介紹:
SQLite是一個開源的嵌入式關係數據庫,它在2000年由D. Richard Hipp發佈,它的減少應用程序管理數據的開銷,SQLite可移植性好,很容易使用,很小,高效而且可靠。
SQLite嵌入到使用它的應用程序中,它們共用相同的進程空間,而不是單獨的一個進程。從外部看,它並不像一個RDBMS,但在進程內部,它卻是完整的,自包含的數據庫引擎。嵌入式數據庫在你的程序內部不需要網絡配置,也不需要管理。因爲客戶端和服務器在同一進程空間運行。SQLite 的數據庫權限只依賴於文件系統,沒有用戶帳戶的概念。SQLite 有數據庫級鎖定,沒有網絡服務器。它需要的內存,其它開銷很小,適合用於嵌入式設備,你需要做的僅僅是把它正確的編譯到你的程序。
特點(SQLite’s Features and Philosophy):
零配置(Zero Configuration)、可移植(Portability):
SQLite的本地類型:INTEGER、 REAL、TEXT、 BLOB、NULL。
基本語法:創、增、刪、查、改。
SQLite支持除了devide之外的關係運算符;
支持除了right和full outer join之外的ASCI SQL;
注意SELECT時,limit 和 offset的用法。
注意多表連接(字段可能重名)。
數據完整性:用戶定義完整性、參照完整性、域完整性、實體完整性。
注意類型親和性。
事物的三個控制命令:BEGIN、 ROLLBACK、COMMIT;事物的種類:DEFERRED、IMMDIAET、EXCLUSIVE。
五種衝突解決方案:REPLACE、IGNORE、FAIL、ABORT、ROLLBACK。
五種鎖狀態:未鎖、共享、保留、未決、排他。
SQLite的數據庫清潔:REINDEX、VACUUM。
查看query的執行:explain select * from test_name ;
事物的生命週期:
任何情況下,只在一個事物中執行一個連接;
pager管理事物、鎖、內存緩衝和負責崩潰恢復。
事物可自動提交,也可以通過begin、commit手動提交。
關於上圖:事務通常是從unlocked、reserved、exclusive三種狀態下開始,默認unlocked;白色條框的狀態可在同一時刻狀態下存在。事務的根本是讀和寫。
日誌是數據庫恢復的唯一方法。
注意臨時表的正確應用。
HOOK()函數對數據庫連接中的insert、delete、update操作都有監視功能。
(1)虛擬數據庫引擎(VBDE),包含:VBDE程序、程序計數器、結果字段的名稱和類型、 參數的綁定值、 運行棧和固定數量的編號的內在單元。VBDE虛擬機的的每條指令都由128箇中的某一個操作碼 和 三個操作數構成。C api 可和VBDE 直接交互。
要得到SQL的VBDE程序,可做入下操作;
.mode column
.header on
.width x x x x x x ……
.explain select * from testname;
B*TREE記錄:包含兩個域,關鍵字域和數據域。B*tree(任務 是排序和遍歷)的頁由B*tree記錄組成。
層次數據組織模型:從下而上數據結構化加強,從上而下數據無序性增加。C API ------VBED------B-tree------Pager-------OS Interface------database file。
B* tree API 的分類;訪問和事務函數、表函數、遊標函數、記錄函數、
(二)編譯器:輸入爲單獨的SQL命令,輸出是優化的VBDE程序。分別在分詞器、分析器、代碼生成器上完成。
(三)分詞器
(四) 分析器;
(五)代碼生成器;無明確定義的接口,負責生成代碼和查詢優化。