~/VibeHandbook
免費 PDF

資料庫

sqlite.org

SQLite

是什麼

想像一個你直接開啟、直接編輯的單個文件檔案,背後沒有任何獨立程式在執行來管理它。SQLite 之於資料庫正是如此:它是一個自包含、無伺服器的關係型資料庫,把整個資料庫裝進一個檔案裡。沒有需要執行或管理的獨立程序。你的應用直接連結這個庫,讀寫該檔案即可。它是全世界部署最廣泛的資料庫,嵌入在手機、瀏覽器和無數應用之中。

優勢

  • 零配置,無需運維伺服器。
  • 整個資料庫就是一個可移植的檔案,便於複製或備份。
  • 本地讀取和中等寫入負載下速度很快。
  • 完整支援 (結構化查詢語言),帶事務和外部索引鍵。
  • 非常適合測試、原型、邊緣執行時和嵌入式使用。

權衡取捨

  • 併發寫入受限。就像一群人共用一支筆,同一時刻只有一個人能寫,其他人仍可閱讀(同一時刻只有一個寫入者;WAL——一種預先記錄寫入、讓讀取和寫入能同時進行的模式——有所幫助)。
  • 並非為大量網路客戶端或高寫入吞吐而設計。
  • 高階型別較少,且沒有原生的使用者/許可權系統。
  • 要擴充套件到單臺主機之外,需要換用其他儲存,或加一層 Turso/LiteFS。

何時使用

將 SQLite 用於本地應用、(命令列介面)工具、桌面和移動軟體、測試套件,以及讀取為主的中小型網站。藉助託管副本,它在邊緣環境中的可行性也越來越高。

與 vibe coding 的契合度

指揮 AI 時,先要求它啟用安全的預設設定:開啟 PRAGMA foreign_keys = ON 和 WAL 日誌,因為 SQLite 預設是關閉外部索引鍵的。讓它使用引數化語句,並把模式遷移儲存在帶版本的 .sql 檔案中。一個有用的提示:告訴 AI 寫入是序列化的,所以它應當把多次插入批次放進一個事務裡,並避免長時間持有寫鎖。由於資料庫本身就是一個檔案,可要求 AI 在你的工具鏈中加入一個簡單的備份步驟(複製該檔案或使用 .backup 命令)。

PRAGMA journal_mode = WAL;
PRAGMA foreign_keys = ON;

CREATE TABLE notes (
  id         INTEGER PRIMARY KEY AUTOINCREMENT,
  title      TEXT NOT NULL,
  body       TEXT,
  created_at TEXT NOT NULL DEFAULT (datetime('now'))
);

-- 把多次插入批次放進一個事務以提升速度
BEGIN;
INSERT INTO notes (title, body) VALUES (?, ?);
INSERT INTO notes (title, body) VALUES (?, ?);
COMMIT;