除了基础的 CRUD 操作,SQLite 还隐藏着许多高级特性,能够解决特定场景下的复杂需求,甚至作为轻量级的数据处理引擎使用。
从 SQLite 3.9.0 开始,官方支持了 JSON1 扩展。这使得 SQLite 可以像 NoSQL 数据库一样处理 JSON 数据,非常适合于存储灵活的模式或配置文件。
-- 创建 JSON 列 CREATE TABLE logs ( id INTEGER PRIMARY KEY, data JSON ); -- 查询 JSON 中的字段 SELECT data ->> '$.user.name' AS user_name FROM logs; -- 使用 JSON 字段作为索引 CREATE INDEX idx_user_id ON logs (data ->> '$.user_id');
SQLite 的 FTS5(Full-Text Search 5,全文搜索第五版)扩展提供了强大的全文检索能力,性能极佳,足以支持中小型网站的站内搜索。
-- 创建虚拟表 CREATE VIRTUAL TABLE articles USING fts5(title, content); -- 插入数据 INSERT INTO articles VALUES('SQLite Tips', 'FTS5 is powerful...'); -- 高效搜索 SELECT * FROM articles WHERE articles MATCH 'powerful';
FTS5 支持布尔运算符(AND, OR, NOT)、前缀查询和自定义分词器。
对于需要将本地 SQLite 数据与云端服务器同步的应用,会话扩展是官方提供的解决方案。
它可以记录表或整库在两次时间点之间的变化(INSERT、UPDATE、DELETE),并将这些变更序列化为二进制补丁或 SQL 语句。这比通过时间戳字段手动实现增量同步要精确得多,且无需修改表结构。
SQLite 的设计允许开发者编写自定义的 SQL 函数、聚合函数或虚拟表。
例如,如果业务需要计算复杂的几何距离,而 SQLite 原生不支持,你可以编写一个 C 扩展,定义 distance(lat1, lng1, lat2, lng2) 函数,并在运行时加载。
-- 加载扩展 SELECT load_extension('libsqlitefunctions.so'); -- 调用自定义函数 SELECT distance(latitude, longitude, 40.7128, -74.0060) FROM places;
由于
SQLite 是单文件且无需配置,它非常适合作为命令行环境下的数据处理工具。你可以利用管道将 CSV 数据导入 SQLite,利用 SQL
的强大表达能力(窗口函数、CTE)进行复杂分析,最后导出结果。这种方式比使用 Python 脚本处理 CSV 或 awk 处理文本要高效、可维护得多。
# 导入 CSV sqlite3 data.db -csv ".import data.csv mytable" # 执行分析并导出 sqlite3 data.db "SELECT category, count(*) FROM mytable GROUP BY category" > result.csv