SQLite 3.35中的新功能

2021-03-23 05:08:52

SQLite开发人员通常更愿意在数据库内部工作。对于外部观察者而言,没有任何变化。 2020是一个令人愉快的例外 - SQLite为普通用户收到了一堆很好的功能,例如生成的列,来自shell中的生成列,更新和梦幻般的.Mode框。

每次2021都将继续传统。这是今天发布的3.35发布的内容:

多年来,用户字面上乞求SQLite Devs以添加SQRT(),log()和pow()等基本函数。答案总是大约相同(不是直接报价):

SQLite被称为“Lite”是有原因的。如果您需要函数,请自己添加它们。

确实是一个可理解的立场。但拒绝添加平方根?同时实现窗口函数,递归查询和其他高级SQL魔术?严重地?

也许SQLite开发人员更愿意专注于大客户愿意支付的功能。无论如何,20年后,我们现在有数学函数!

可能是第二个最受欢迎的用户痛苦来源。它非常讨厌,您可以根据需要创建多列,但无法删除它们。想要删除列?在没有它的情况下制作表的副本,并删除旧的副本。

现在这种痛苦也在消失!改变表丢弃列,我们等待你多久了。

要删除列,SQLite必须完全覆盖表 - 因此操作不快。但它仍然很好。

删除,插入和更新查询现在可以分别返回它们分别删除,添加或更改的行。

创建表用户(ID Integer主键,First_name Text,Last_name文本);插入用户(first_name,last_name)值('简'' doe')返回id;

更新产品设定价格=价格* 1。 10价格< = 99。 99返回名称,价格为new_price;

CTE(常见表表达式)是让查询更具表现力的好方法。例如,计算在每世纪的城市数量:

创建表城(城市文本,时区文字,Geo_lat Real,Geo_lon Real,人口整数,Foundation_year Integer); - 插入数据...与历史(选择城市,(Foundation_year / 100)+1从城市中选择City)选择世纪|| '世纪'截至世纪DESC的百年阶段,历史记录(*)作为City_Count组;

如果在查询中多次发生相同的CTE,则SQLite会多次计算它。 对于大表来说,这可能不是很快。 使用物质化的CTE,SQLite执行一次查询,记住结果,不会重新计算它(在同一查询中): 历史为物化(选择......)选择......从历史......从历史......从历史......