SQLite 3.37.0 发布,支持严格的字段数据类型

大家好,我是只谈技术不剪发的 Tony 老师。

嵌入式数据库 SQLite 开发团队于 2021 年 11 月 27 日发布了 SQLite 3.37.0 版本。该版本最大的更新就是支持严格的表字段数据类型,本文给大家逐一进行分析。

如果觉得文章有用,欢迎评论📝、点赞👍、推荐🎁

SQLite 默认使用灵活的数据类型。例如,某个表的字段类型为 INTEGER,SQLite 存储数据时会尝试将插入该列的值转换为整数。因此,插入字符串”123″的结果是存储了整数 123。不过,如果无法将插入的数据无损地转换为整数,例如,如果输入为”xyz”,则将插入原始字符串。更多相关内容,可以参考 SQLite 文档中的数据类型

一些开发人员认为 SQLite 灵活的类型规则很好,但是另一些开发人员对此感到奇怪,他们认为 SQL 标准和其他数据库中的严格数据类型更好。对于后者而言,SQLite 3.37.0 开始支持这种严格的数据类型,该功能可以基于表级别指定。

例如:


CREATE TABLE t(id integer);
INSERT INTO t VALUES ('123'), ('abc');

SELECT * FROM t;
id |

123|
abc|

CREATE TABLE t(id integer) STRICT;
INSERT INTO t VALUES ('123');

INSERT INTO t VALUES ('abc');
Error: stepping, cannot store TEXT value in INTEGER column t.id (19)

SELECT * FROM t;
id |

123|

当我们使用 ALTER TABLE ADD COLUMN 命令增加字段时,如果增加的字段存在 CHECK 约束,或者生成列包含 NOT NULL 约束,SQLite 将会检查已有数据是否满足这些新的约束,如果不满足则返回错误。例如:

CREATE TABLE t1(id integer, col1 integer);
INSERT INTO t1 values(1,null);

ALTER TABLE t1 ADD col2 integer NOT NULL GENERATED ALWAYS AS (col1*col1);
Error: stepping, NOT NULL constraint failed (1)

SQLite 3.37.0 增加了以下编译指定:

PRAGMA table_list;
PRAGMA schema.table_list;
PRAGMA table_list(table-name);

该编译指令返回指定模式下的表和视图信息,每个表一行数据。例如:

sqlite> PRAGMA table_list;
main|t1|table|2|0|0
main|t|table|1|0|1
main|sqlite_schema|table|5|0|0
temp|sqlite_temp_schema|table|5|0|0

当前版本 table_list 指令返回的信息如下,未来 SQLite 很可能会增加额外的输出信息:

默认命令会显示所有模式下的表。如果指定了 schema.,只显示该模式下的表。如果指定了 table-name 参数,只返回该表的信息。

  • 增加了.connection 命令,允许命令行工具同时打开多个数据库连接。
  • 增加了–safe 命令行选项,可以用于禁止可能对计算机文件(非当前数据库文件)产生副作用的点号命令和 SQL 语句。
  • 改善多行 SQL 语句读取时的性能。

如果在子查询或者视图中删除 ORDER BY 子句不会改变查询的语义,查询计划器将会忽略该子句。

generate_series 表值函数的第一个参数(START)修改为必选参数。如果想要使用以前的方式,可以使用 -DZERO_ARGUMENT_GENERATE_SERIES 编译时选项。

SQLite 3.37.0 使用更少的内存存储数据库模式信息。

Original: https://blog.csdn.net/horses/article/details/121635106
Author: 不剪发的Tony老师
Title: SQLite 3.37.0 发布,支持严格的字段数据类型

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/816440/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球