SQLite 是遵守 ACID 的关系数据库管理系统,它包含在一个相对小的 C 程序库中。与许多其它数据库管理系统不同,SQLite 不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中。
SQLite 实现了大多数 SQL 标准。它使用动态的、弱类型的 SQL 语法。它作为嵌入式数据库,是应用程序,在本地/客户端存储数据的常见选择。
SQLite 3.35.0 正式发布,本次更新内容如下:
- 添加了内置的
SQL math functions()
(需要使用 DSQLITE_ENABLE_MATH_FUNCTIONS 编译时选项。) - 添加了对 ALTER TABLE DROP COLUMN 的支持
- 通用 UPSERT
- 允许按顺序评估多个 ON CONFLICT 子句
- 最后的 ON CONFLICT 子句可以省略冲突目标,但仍然使用 DO UPDATE
- 在 DELETE,INSERT 和 UPDATE 语句上添加对 RETURNING 子句的支持
- 在包含非常大的 TEXT 或 BLOB 值的数据库上运行 VACUUM 时,使用较少的内存。不再需要一次将整个 TEXT 或 BLOB 都保存在内存中
- 指定公用表表达式时,增加对 MATERIALIZED 和 NOT MATERIALIZED 提示的支持。默认行为以前是 NOT MATERIALIZED,但现在已被多次使用的 CTE 更改为 MATERIALIZED
- 该 SQLITE_DBCONFIG_ENABLE_TRIGGER 和 SQLITE_DBCONFIG_ENABLE_VIEW 设置被修改,使它们只控制在主数据库模式或在连接数据库模式的触发和视图,而不是在 TEMP 模式。
- 查询计划器/优化器改进
- 增强了最小/最大优化,使其能更好地与 IN 操作符和上一版本的 OP_SeekScan 优化配合使用
- 尝试将 WHERE 子句中的 EXISTS 操作符当作 IN 操作符来处理,在这种情况下,这是一种有效的转换,有可能提高性能
- 允许 UNION ALL 子查询被扁平化,即使父查询是 join
- 在 WHERE 子句中的 IS NOT NULL 表达式上使用索引(如果合适的话),即使 STAT4 被禁用
- 如果
x
是具有NOT NULL
约束的列,并且不涉及外部连接,那么x IS NULL
或x IS NOT NULL
形式的表达式可能会被转换为简单的 FALSE 或 TRUE - 如果 UPDATE 不修改任何与外键相关联的列,则避免在 UPDATE 语句上检查外键约束
- 允许将 WHERE 项推倒放入包含窗口函数的子查询中,只要 WHERE 项完全由子查询中所有窗口函数的 PARTITION BY 子句中找到的常量和表达式的副本组成
- CLI 增强功能
- 增强
.stats
命令,接受新的参数stmt
和vmstep
,从而分别显示准备语句统计信息和仅显示虚拟机步骤计数 - 增加
.filectrl data_version
命令 - 增强
.once
和.output
命令,如果目标参数以|
开头(表示输出重定向到管道中),那么参数不需要加引号
- 增强
- 错误修正
- 修正当处理一个语法不正确的 SELECT 语句时,一个潜在的 NULL 指针析出,该语句有一个相关的 WHERE 子句和一个
HAVING 0
子句 - 修复了 3.33.0 版本的一个 in-operator 优化中的 bug,这个 bug 可能会导致错误的答案
- 修正 LIKE 运算符中,如果模式以
%
结尾,且有ESCAPE '_'
子句时,会导致错误的答案
- 修正当处理一个语法不正确的 SELECT 语句时,一个潜在的 NULL 指针析出,该语句有一个相关的 WHERE 子句和一个
更多详情可查看:https://sqlite.org/changes.html