🗄️ SQLite
輕量嵌入式 SQL 資料庫(單檔案)
SQLite 不需要獨立伺服器程序,整個資料庫就是一個檔案,適合開發測試、行動應用、桌面程式與讀多寫少的小型 Web 應用。
安裝
$ sudo apt install -y sqlite3
sqlite3 --version3.39.2 2022-07-21
基本操作
$ sqlite3 myapp.db # 開啟(不存在則建立)-- SQLite 殼層指令(以 . 開頭,不需分號)
.tables -- 列出所有資料表
.schema users -- 查看資料表結構
.headers on -- 顯示欄位名稱
.mode column -- 以欄位對齊格式顯示
.quit -- 離開$ # 直接執行 SQL(非互動模式)
sqlite3 myapp.db "SELECT * FROM users LIMIT 5;"
# 匯入 SQL 腳本
sqlite3 myapp.db < schema.sql常用 SQL
-- 建立資料表
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
created DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- 建立索引
CREATE INDEX idx_users_email ON users(email);
-- 插入
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
-- 查詢
SELECT * FROM users WHERE name LIKE 'A%' ORDER BY created DESC LIMIT 10;
-- 更新
UPDATE users SET name = 'Bob' WHERE id = 1;
-- 刪除
DELETE FROM users WHERE id = 1;
-- 交易(批次操作必備,大幅提升效能)
BEGIN TRANSACTION;
INSERT INTO orders ...;
INSERT INTO order_items ...;
COMMIT;備份
$ # 方法 1:直接複製檔案(先確認無寫入中的程序)
cp myapp.db myapp_$(date +%Y%m%d).db
# 方法 2:線上備份(最安全,支援執行中的資料庫)
sqlite3 myapp.db ".backup /backup/myapp_$(date +%Y%m%d).db"
# 方法 3:匯出為 SQL
sqlite3 myapp.db .dump > myapp_$(date +%Y%m%d).sql效能與注意事項
SQLite 使用檔案層級鎖,同時只能有一個寫入者。高並發寫入場景(如多執行緒 Web 應用)請改用 PostgreSQL 或 MySQL。
-- 常用效能優化 PRAGMA
PRAGMA journal_mode = WAL; -- WAL 模式:讀寫可並行(強烈建議)
PRAGMA synchronous = NORMAL; -- WAL 模式下的最佳同步設定
PRAGMA cache_size = -64000; -- 快取大小(-64000 = 64MB)
PRAGMA foreign_keys = ON; -- 啟用外鍵約束(預設關閉!)
PRAGMA temp_store = MEMORY; -- 暫存資料使用記憶體WAL(Write-Ahead Logging)模式讓讀取與寫入可以同時進行,是 SQLite 最重要的效能調整,應在每次連線建立時設定。