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;