SQLite 3.35.0 发布,最常用的数据库引擎

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 '_'子句时,会导致错误的答案

更多详情可查看:https://sqlite.org/changes.html

发表回复