SQLite 作為零配置、無伺服器、單檔案的輕量級資料庫,廣泛應用於嵌入式裝置、行動應用、桌面軟體與測試環境。本文系統整理 sqlite3 命令列工具操作、資料型別、約束條件、DDL/DML 核心語法與索引管理,提供快速查閱手冊。
以 . 開頭,不需分號結尾。
| 指令 | 用途 | 範例 |
|---|---|---|
.open FILE | 開啟/建立資料庫檔 | .open test.db |
.databases | 列出掛載資料庫 | |
.tables | 列出所有資料表 | |
.schema [TABLE] | 顯示建表 SQL | .schema users |
.mode MODE | 設定輸出模式 | .mode column / line / csv / json |
.header on|off | 顯示/隱藏欄位名 | |
.separator STR | 設定分隔符 | .separator ',' |
.width W1 W2 ... | 設定欄寬(column 模式) | .width 10 20 30 |
.dump [TABLE] | 匯出 SQL 腳本 | .dump > backup.sql |
.import FILE TABLE | 匯入 CSV/TSV | .import data.csv users |
.backup FILE | 線上熱備份 | .backup backup.db |
.quit / .exit | 離開 |
| 約束 | 語法 | 說明 |
|---|---|---|
| PRIMARY KEY | id INTEGER PRIMARY KEY | 唯一識別,整數 PK 自動賦值(Rowid Alias) |
| NOT NULL | name TEXT NOT NULL | 禁止空值 |
| UNIQUE | email TEXT UNIQUE | 值唯一(可含多個 NULL) |
| CHECK | age INTEGER CHECK(age > 6) | 條件驗證 |
| DEFAULT | school TEXT DEFAULT 'XX小学' | 預設值 |
所有 SQL 指令以 ; 結尾,-- 為註解。
CREATE TABLE [IF NOT EXISTS] table_name (
col1 TYPE [CONSTRAINT],
col2 TYPE [CONSTRAINT],
...
);
-- 範例:學生資訊表
CREATE TABLE student_info (
stu_no INTEGER PRIMARY KEY,
name TEXT NOT NULL,
id INTEGER UNIQUE,
age INTEGER CHECK(age > 6),
school TEXT DEFAULT 'XX小学'
);
INSERT INTO table_name (col1, col2, ...) VALUES (val1, val2, ...);
-- 多筆
INSERT INTO student_info (stu_no, name) VALUES (1, 'Alex'), (2, 'Bob');
UPDATE table_name SET col1=val1, col2=val2 WHERE condition;
UPDATE student_info SET name='Hence' WHERE stu_no=1;
DELETE FROM table_name [WHERE condition];
DELETE FROM student_info WHERE stu_no=1;
-- 不加 WHERE 清空全表
SELECT [DISTINCT] col1, col2, ... FROM table_name [WHERE expr] [ORDER BY col ASC|DESC] [LIMIT n];
-- 範例
SELECT * FROM student_info;
SELECT * FROM student_info LIMIT 10;
SELECT * FROM student_info ORDER BY age DESC;
SELECT * FROM student_info WHERE age BETWEEN 10 AND 20;
SELECT * FROM student_info WHERE name IN ('Alex','Bob');
SELECT COUNT(*) FROM student_info;
SELECT DISTINCT school FROM student_info;
CREATE INDEX idx_name ON table_name (col);
CREATE INDEX idx_stu_no ON student_info (stu_no);
DROP INDEX idx_name;
DROP TABLE [IF EXISTS] table_name;
SELECT * FROM t WHERE id = ? 防注入、提升計畫複用BEGIN; ... COMMIT; / ROLLBACK; 預設自動提交PRAGMA journal_mode=WAL; 大幅提升並發讀寫效能ANALYZE; 更新查詢規劃器統計資訊VACUUM; 回收空間、重組檔案(需獨佔鎖)?mode=rwc(讀寫建立)或 ?mode=ro(唯讀)PRAGMA synchronous=OFF(極高效能、斷電風險)或 NORMAL(平衡)PRAGMA cache_size=-32768(32MB 頁面快取)sqlite3_prepare_v2 避免重複解析