SQLite 作為輕量級嵌入式資料庫,廣泛應用於行動裝置與桌面應用。本文彙整 14 大核心知識點,涵蓋建庫、型別系統、並發控制、DDL 限制等實戰重點。
若不建立資料表,資料庫檔案不會實際寫入磁碟。sqlite3_open 若指定路徑不存在會自動建立檔案,但後續查詢失敗多因路徑錯誤,建議先檢查檔案是否存在再決定開啟或建立。
宣告為 INTEGER PRIMARY KEY 的欄位即為自動遞增,無需額外序列物件。
SQLite 僅有 5 種儲存類別:NULL、INTEGER、REAL、TEXT、BLOB。但不強制型別約束,任何資料可插入任何欄位(除 INTEGER PRIMARY KEY 僅接受 64 位整數)。
插入時會嘗試依宣告型別轉換(如字串轉整數),轉換失敗則存原始字串,此機制稱為型別親和性。
數值型主鍵視 0 與 0.0 為相同值(整數比較相等),故不可同時作為不同列的主鍵。
SELECT(共享鎖)。SQLITE_BUSY,可用 sqlite3_busy_timeout() 設定等待超時。編譯時需啟用 SQLITE_THREADSAFE=1,Windows/Linux 預編譯版本均已開啟。可透過 sqlite3_threadsafe() 執行期檢查。
.tables.schemaLIKE 模式過濾SQLite 3.0+ 單筆記錄無大小限制,資料庫理論上限 2TB(2^41 bytes)。物件名稱無長度限制,SQL 函數名限 255 字元。
宣告 VARCHAR(10) 實際可存 500 字元且永不截斷,長度檢查僅存在於宣告中。
僅支援 ADD COLUMN(僅能加在表尾)與 RENAME TABLE。複雜結構變更需:建立臨時表 → 複製資料 → 刪除舊表 → 建立新表 → 回寫資料。
SELECT * FROM Account LIMIT 9 OFFSET 10(跳過 10 筆取 9 筆),或 LIMIT 10,9(MySQL 相容寫法)。