SQLite在使用之前不需要“安装”。 没有“设置”程序。 没有 需要启动、停止或配置的服务器进程。 有 管理员无需创建新的数据库实例或分配 对用户的访问权限。 SQLite不使用配置文件。 不需要做任何事情来告诉系统SQLite正在运行。 系统崩溃或电源故障后,无需执行任何操作即可恢复。 没有需要排除的问题。
SQLite很管用。
其他更熟悉的数据库引擎在运行后运行良好。 但进行初始安装和配置可以 复杂得吓人。
(另请参见 无服务器 文档页面。)
大多数SQL数据库引擎都是作为单独的服务器实现的 过程。 要访问数据库的程序通信 使用某种进程间通信与服务器 (通常是TCP/IP)向服务器发送请求并接收 返回结果。 SQLite不是这样工作的。 使用SQLite 要访问数据库的进程读取和写入 直接从磁盘上的数据库文件。 没有中介 服务器进程。
无服务器有优点也有缺点。 这个 主要优点是没有单独的服务器进程 安装、设置、配置、初始化、管理和故障排除。 这就是SQLite是“零配置”数据库的原因之一 发动机。 使用SQLite的程序不需要管理支持 用于在运行之前设置数据库引擎。 任何程序 能够访问磁盘的用户可以使用SQLite数据库。
另一方面,使用服务器的数据库引擎可以提供 更好地防止客户端应用程序中的错误-零散指针 在客户端中无法损坏服务器上的内存。 因为服务器 是单个持久进程,它可以使用 更精确,允许更细粒度的锁定和更好的并发性。
大多数SQL数据库引擎都是基于客户机/服务器的。 在那些 无服务器,SQLite是作者唯一知道的 允许多个应用程序同时访问同一数据库。
SQLite数据库是一个可以定位的普通磁盘文件 目录层次结构中的任意位置。 如果SQLite可以读取 然后它可以读取数据库中的任何内容。 如果磁盘 文件及其目录都是可写的,那么SQLite可以更改任何内容 在数据库中。 数据库文件可以轻松复制到USB上 记忆棒或通过电子邮件共享。
其他SQL数据库引擎倾向于将数据存储为 文件夹。 通常,这些文件位于标准位置 数据库引擎本身可以访问。 这使数据更加安全, 但也使得访问变得更加困难。 一些SQL数据库引擎提供 直接写入磁盘并绕过文件系统的选项 总共。 这提供了额外的性能,但代价是 设置和维护相当复杂。
SQLite文件格式是跨平台的。 写入的数据库文件 可以将一台计算机上的 不同的体系结构。 大端序或小端序,32位或 64位无关紧要。 所有机器使用相同的文件格式。 此外,开发人员承诺保持文件格式 稳定且向后兼容,因此较新版本的SQLite可以 读写旧的数据库文件。
大多数其他SQL数据库引擎都要求您转储和恢复 从一个平台移动到另一个平台时的数据库 当升级到软件的较新版本时。
当针对大小进行优化时,整个SQLite库都启用了所有功能 是 大小小于1MiB (在ix86上使用“尺寸”测量 GNU编译器套件中的实用程序。) 可以禁用不需要的功能 在编译时进一步减小库的大小。
大多数其他SQL数据库引擎都比这个大得多。 IBM自夸 其最近发布的CloudScape数据库引擎“仅”是2MiB jar文件-比SQLite大一个数量级 压缩的! Firebird自夸其客户端库只有350KiB。 那是 与SQLite一样大,甚至不包含数据库引擎。 Oracle的Berkeley DB库是450KiB,它省略了SQL 支持,只为程序员提供简单的键/值对。
大多数SQL数据库引擎使用静态类型。 关联了一个数据类型 表中的每一列只包含特定数据类型的值 允许存储在该列中。 SQLite放宽了这一限制 通过使用manifest类型。 在清单类型中,数据类型是值本身的属性,而不是 存储值的列的。 因此,SQLite允许用户存储 任何数据类型的任何值放入任何列中,而不管声明的类型是什么 该列的。 (此规则有一些例外:整数 PRIMARY KEY列只能存储整数。 SQLite试图胁迫 如果可以,将值转换为列的声明数据类型。)
据我们所知,SQL语言规范允许使用 清单类型的。 然而,大多数其他SQL数据库引擎 静态类型等等 感觉清单类型的使用是SQLite中的一个错误。 但是作者们 SQLite的用户强烈认为这是一个功能。 清单的使用 在SQLite中键入是一个经过深思熟虑的设计决策,已在实践中得到证明 使SQLite更可靠、更易于使用,尤其是在 与动态类型编程语言(如Tcl和 蟒蛇。
大多数其他SQL数据库引擎都分配了固定数量的磁盘空间 对于大多数表中的每一行。 他们玩特殊的处理技巧 BLOB和CLOB的长度可能相差很大。 但对大多数人来说 表,如果将列声明为VARCHAR(100),则数据库 引擎将分配 100字节的磁盘空间,无论您实际有多少信息 存储在该列中。
相反,SQLite只使用实际的磁盘空间量 需要将信息存储在一行中。 如果您存储单个 VARCHAR(100)列中的字符,则只有单个字节的磁盘 空间被占用。 (实际上是两个字节-在 记录其数据类型和长度的每列的开头。)
SQLite使用可变长度记录有很多优点。 显然,这会导致较小的数据库文件。 它还使 数据库运行速度更快,因为来回移动的信息更少 磁盘。 而且,使用可变长度的记录可以 SQLite使用清单类型而不是静态类型。
SQLite的源代码设计为可读且可访问 普通程序员。 所有程序和数据结构以及许多 自动变量被仔细注释,并包含以下有用信息 他们做了什么。省略了锅炉板注释。
每个SQL数据库引擎都会将每个SQL语句编译为 内部数据结构,然后用于执行 声明。 但在大多数SQL引擎中,内部数据结构是 由相互关联的结构和对象组成的复杂网络。 在SQLite中,编译的 语句形式是一个类似机器语言的短程序 代表。 数据库用户可以查看此 虚拟机语言 通过在 解释 关键字 查询。
在SQLite中使用虚拟机对 图书馆的发展。 虚拟机提供了清晰、定义明确的 SQLite前端(解析SQL的部分)之间的连接 语句并生成虚拟机代码)和后端( 执行虚拟机代码并计算结果的部分。) 虚拟机允许开发人员在 从SQLite试图对每条语句进行的操作中很容易阅读 它可以编译,这对调试非常有帮助。 根据编译方式的不同,SQLite还具有以下功能 跟踪虚拟机的执行-打印每个 虚拟机指令及其执行时的结果。
SQLite的源代码在公共域中。 无版权要求 是在核心源代码的任何部分上生成的。 (文件和测试 代码是另一回事-文档和测试逻辑的某些部分 由开源许可证管理。) 所有贡献者 SQLite核心软件已签署宣誓书,明确否认 代码的版权利益。 这意味着任何人都可以合法地 用SQLite源代码做任何他们想做的事情。
还有其他具有自由许可证的SQL数据库引擎允许 广泛自由使用的代码。 但其他引擎 仍受版权法管辖。 SQLite在版权方面有所不同 法律根本不适用。
其他SQL数据库引擎的源代码文件通常从 带有注释,说明您查看和复制该文件的合法权利。 SQLite源代码不包含许可证,因为它不受 版权。 SQLite源代码提供了一个优点,而不是许可证: 愿你行善而非作恶 愿你能原谅自己,原谅他人 愿你自由分享,永不索取多于付出。
SQLite为SQL语言提供了许多增强功能 通常在其他数据库引擎中找不到。 已经提到EXPLAIN关键字和清单类型 以上。 SQLite还提供以下语句 更换 和 论冲突 允许 增加了对约束冲突解决的控制。 SQLite支持 附件 和 DETACH公司 允许多个 在同一查询中一起使用的独立数据库。 SQLite定义了允许用户添加新的 SQL函数 和 排序序列 .