SQLite 实战进阶:扩展与高级 SQL 特性

admin 7 1 12 2026-03-21 00:10:53
admin
#1 发表于 2026-03-21 00:10:53

除了基础的 CRUD 操作,SQLite 还隐藏着许多高级特性,能够解决特定场景下的复杂需求,甚至作为轻量级的数据处理引擎使用。

1. JSON 支持:嵌入式文档数据库

从 SQLite 3.9.0 开始,官方支持了 JSON1 扩展。这使得 SQLite 可以像 NoSQL 数据库一样处理 JSON 数据,非常适合于存储灵活的模式或配置文件。

sql
-- 创建 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');

2. 全文搜索(FTS5):构建搜索引擎

SQLite 的 FTS5(Full-Text Search 5,全文搜索第五版)扩展提供了强大的全文检索能力,性能极佳,足以支持中小型网站的站内搜索。

sql
-- 创建虚拟表
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)、前缀查询和自定义分词器。

3. 会话扩展(Session Extension):同步与变更追踪

对于需要将本地 SQLite 数据与云端服务器同步的应用,会话扩展是官方提供的解决方案。
它可以记录表或整库在两次时间点之间的变化(INSERT、UPDATE、DELETE),并将这些变更序列化为二进制补丁或 SQL 语句。这比通过时间戳字段手动实现增量同步要精确得多,且无需修改表结构。

4. 扩展能力:加载 C 语言扩展

SQLite 的设计允许开发者编写自定义的 SQL 函数、聚合函数或虚拟表。
例如,如果业务需要计算复杂的几何距离,而 SQLite 原生不支持,你可以编写一个 C 扩展,定义 distance(lat1, lng1, lat2, lng2) 函数,并在运行时加载。

sql
-- 加载扩展
SELECT load_extension('libsqlitefunctions.so');
-- 调用自定义函数
SELECT distance(latitude, longitude, 40.7128, -74.0060) FROM places;

5. 使用 SQLite 作为数据仓库进行命令行分析

由于 SQLite 是单文件且无需配置,它非常适合作为命令行环境下的数据处理工具。你可以利用管道将 CSV 数据导入 SQLite,利用 SQL 的强大表达能力(窗口函数、CTE)进行复杂分析,最后导出结果。这种方式比使用 Python 脚本处理 CSV 或 awk 处理文本要高效、可维护得多。

bash
# 导入 CSV
sqlite3 data.db -csv ".import data.csv mytable"
# 执行分析并导出
sqlite3 data.db "SELECT category, count(*) FROM mytable GROUP BY category" > result.csv

登录 后参与讨论