SQLite 官方团队于 2026 年 4 月 9 日 发布了 SQLite 3.53.0 版本。本次更新在稳定性修复的基础上,引入了多项 SQL 语言能力增强、CLI 工具革新以及新的 C API 接口,整体属于强烈推荐升级的重要版本。
关键稳定性修复
SQLite 3.53.0 版本修复了 WAL-reset 场景下可能导致数据库损坏的严重缺陷。该问题影响使用 WAL(Write‑Ahead Logging)模式的数据库,在异常重启或特定事务序列下可能触发数据损坏。
本次修复显著提升了 WAL 模式下的可靠性,使用 WAL 模式的系统建议尽快升级至 3.53.0。
SQL语言能力增强
ALTER TABLE 现在可以支持添加、移除 NOT NULL 约束,支持添加、移除CHECK 约束;进一步补齐了 SQLite 在表结构演进方面的能力,与主流关系型数据库更加接近。
新增 SQL 语句 REINDEX EXPRESSIONS,用于重建表达式索引,可以修复陈旧表达式索引(stale expression indexes)问题,也是 3.52.x 系列撤回事件后的重要修复与增强手段。
新增内置 JSON 函数 json_array_insert()、jsonb_array_insert(),进一步增强了 SQLite 对 JSON/JSONB 数据结构的原生操作能力。
TEMP 触发器现在可以查询和修改 main 模式中的表,对于依赖 TEMP 触发器做跨模式操作的程序尤为有用。
当 VACUUM INTO 的目标文件使用 URI 文件名并且 URI 中包含 reserve=N(0--255)参数时,新生成的数据库将使用相同的 reserve。
CLI重大改进
SQLite 3.53.0 引入了全新的 Query Result Formatter(查询结果格式化库),并且已经集成到了 CLI(命令行工具)中。
交互式 CLI 现在默认使用 Unicode 画框表格展示结果;数值字段默认右对齐,整体可读性显著提升;批处理模式保持旧输出格式,确保脚本兼容性。
同时,CLI 还包含了多项实用增强:
- .mode 命令大幅增强;
- .indexes 命令的 pattern 参数改为匹配索引名;
- .progress 名新增 --timeout 参数;
- .timer once 支持仅统计下一条 SQL;
- 自动加载 .sql 或者 .txt 文件作为脚本执行;
- 修复 .testcase 以及 .check 命令长期存在的问题。
新增与增强的 C API
SQLite 3.53.0 同步扩展了底层接口能力,新增函数:
- sqlite3_str_truncate();
- sqlite3_str_free();
- sqlite3_carray_bind_v2();
- sqlite3_prepare_v3() 新增 SQLITE_PREPARE_FROM_DDL 选项;
- 新增常量 SQLITE_UTF8_ZT;
- 新增选项 SQLITE_LIMIT_PARSER_DEPTH、SQLITE_DBCONFIG_FP_DIGITS
查询规划器改进
SQLite 3.53.0 对查询规划器进行了多项深度优化,尤其针对复杂查询和数据仓库类负载:
- EXCEPT、INTERSECT、UNION 集合操作统一改为排序加归并(sort-and-merge)算法,取代过去的哈希表方式,在绝大多数场景下性能更优、内存使用更稳定。
- 星型模型(Star Schema)优化,改进大规模多表 JOIN 场景下的连接顺序选择,优化数据分析、报表类查询。
- EXISTS-to-JOIN 优化增强,新生成的 JOIN 不再必须位于最内层循环,只要依赖关系满足,即可放置在外层,提升复杂子查询的可优化空间。
- omit-noop-join 优化增强,现在可以一次性省略整个不影响结果的 JOIN 链,减少不必要的表访问与循环层级。
- GROUP BY、ORDER BY 索引复用,允许如下形式的查询使用单一索引进行优化,前提是当 e1 与 e2 只有 ASC、DESC 顺序上不同:GROUP BY e1 ORDER BY e2。
- 虚拟表 DISTINCT 优化,在结果集与 ORDER BY 不完全一致的场景下允许虚拟表自行优化 DISTINCT。
其他更新
SQLite 3.53.0 还重写了浮点数与文本之间的转换逻辑,正式引入 Self‑Healing Index(索引自愈)机制,增强了 Session 扩展接口,正式停止支持 Windows RT,更新了 JavaScript / WASM 平台。
完整的发行说明参考: