~/VibeHandbook
$39

数据库

sqlite.org

SQLite

是什么

SQLite 是一个自包含、无服务器的关系型数据库,它将整个数据库存储在单个文件中。没有需要运行或管理的独立进程;你的应用直接链接这个库,读写该文件即可。它是全世界部署最广泛的数据库,嵌入在手机、浏览器和无数应用之中。

优势

  • 零配置,无需运维服务器。
  • 整个数据库就是一个可移植的文件,便于复制或备份。
  • 本地读取和中等写入负载下速度很快。
  • 完整支持 SQL,带事务和外键。
  • 非常适合测试、原型、边缘运行时和嵌入式使用。

权衡取舍

  • 并发写入受限(同一时刻只有一个写入者;WAL 模式有所帮助)。
  • 并非为大量网络客户端或高写入吞吐而设计。
  • 高级类型较少,且没有原生的用户/权限系统。
  • 要扩展到单台主机之外,需要换用其他存储,或加一层 Turso/LiteFS。

何时使用

将 SQLite 用于本地应用、CLI 工具、桌面和移动软件、测试套件,以及读取为主的中小型网站。借助托管副本,它在边缘环境中的可行性也越来越高。

与 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;