首页 > 数据库 > SQLite > 正文

SQLite 第三版总览(简介)

2024-09-07 00:10:02
字体:
来源:转载
供稿:网友

SQLite 第三版总览

SQLite 第三版主要主要介绍关于类库的一些变化, 包括:

  • 介绍了一个关于数据库文件的更紧凑的格式.
  • 若类型和 BLOB 支持.
  • 支持 UTF-8 and UTF-16 文本.
  • 用户定义的文件排列顺序.
  • 64字节的行编号.
  • 针对并发性的一些改良.

这篇文档简易的介绍了SQlite3.0版针对于2.8版的一些改进,适用于对SQlite2.8版比较了解的用户。

命名上的变化

在可预见的未来,错误修正这项功能将继续支持SQLite 2.8版。为了保证这两个版本可以共存,在3.0版本中,一些主要文件的名称和API的名称中都加了个”3“。例如, c程序内含文件的名称已经从"sqlite.h"改为"sqlite3.h".还有,用来和数据库一起操作的数据命令解释程序也从 "sqlite.exe" 改为 "sqlite3.exe"。有了这些命名上的区别,SQLite 2.8版和SQLite 3.0版就可以同时安装在同一个系统下了。另外,名称上的区别也使同一个C程序可以同时和2.8,3.0两个版本同时相连并使用同一个类库。

新的文件格式

SQlite的数据库文件格式已被完全更新, 2.1版的格式和3.0版的格式是互不兼容的。比如,2.8版的SQLite 是无法读取3.0版的SQlite数据库文件的,同样,3.0版的SQLite也是无法读取2.8版的 SQlite数据库文件的。

如想把SQLite 2.8版的数据库转换成3.0版的数据库的话,你可以用一些现成的命令行操作,比如输入下面的命令:

sqlite OLD.DB .dump | sqlite3 NEW.DB

新的数据库文件格式使用B 树型数据表格。在B 树中,所有的数据都被存储在(数据结构中)树结构端结点,而不是既在(数据结构中)树结构端结点又 在树的分支节点。B 树型数据表格具有很好的测量性,并且可以存储比较大的数据组。此外,传统的B-树也仍被应用在SQlite3.0的许多目录中。

新的文件格式可以存储的可变页的长度在512和32768字节之间。每页的文件长度都可以在页眉显示出来,所以从理论上来说,同一个类库可以读取不同长度的数据库,但实际上这一点还没有完全实现。

新的文件格式在磁盘映像中省略了没有被应用的区域。例如,目录仅仅显示B-树所存储的主要部分而不是显示所有的数据。也就是说,记录数据长度的区域 被省略了。整数值,比如说关键字的长度和关键数据可以用变长量来编译,这样一来,最常见的数据就可以只用一两个字节来显示了,还有,如果需要的话,最高 64字节的数据信息也是可以编译的。 在3.0版中,整数和浮动的点数据是用二进制来记录的,但在2.0版中,它们则是被转换成ASCII码的。所以,同一个数据库文件,如果是记录在 SQlite3.0中,就可以比记录在SQlite2.8中少占用25%至30%的磁盘空间。

关于 SQLite3.0版所采用的B-树的文件格式具体细节,你可以点击 btree.c 看标题注释。

弱类型和BLOB技术支持

SQLite2.8在数据库内部可以用不同的文件格式处理文件,但是,如果想把信息写到硬盘或是通过API和其它数据相连,所有文件格式都必须被转 换成ASCII文本格式。SQLite 3.0则不同,它可以把数据可内部的主要数据,也就是上文所提到的用变长量所表示的数据显示给用户,并在适当的时候用二进制的形式在磁盘中显示。为了支持 BLOB,非ASCII格式的数据也可以在磁盘中显示。

SQLite 2.8版有一个特点,就是任何类型的数据都可以存储在任意的数据列中,不受数据列所要求存储的文件类型的限制。这个特性被保留在3.0版中并有所改进。虽 然数据文件的格式决定了文件的类型,每列所存储的文件都要有规定的属性,但在3.0中每个列都是可以存储不同类型的数据的。当数据被存入一个数据列的时 候,这个列将尽全力把存入的数据的文件格式转换成该列所要求的文件格式。所有的SQL数据库引擎都是这样的。所不同的是,SQLite 3.0 将存储数据即使转换该数据的文件类型是不可能的。

例如,一个数据列要求所存储的文件的类型是 "INTEGER",你输入一个字符串,这个列将自动检查所输入的字符串是否是数字,如果它确实看起来像是数字,字符串将被转换成数字,然后,如果这个数 字没有分数部分的话,它将被转换成整数存储起来。但是如果这个字符串不是一个规则的数字的话,它将仍被保存为一个字符串。如果一个列要求所存储的文件的类 型是"TEXT"的话,在存储数据之前,列将尝试把数字转换成 ASCII-Text来表示数据。但是,BLOBS在文本列仍然被保存成BLOBS,因为在通常情况下你是不可能把BLOB转换成文本的。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表