跳到主要内容

SQLite 简介

SQLite 简介

SQLite 是一个非常轻量级的数据库,具有可移植性好、易于使用、体积小、高效、可靠等优点。同时,SQLite 也是一个进程内的库,可实现自给自足的、无服务器、零配置、事务性的 SQL 数据库引擎。

SQLite 没有用户账户的概念,其数据库权限仅依赖于文件系统,应用程序可根据需要进行动态链接或静态链接。许多时候,我们都将 SQLite 直接嵌入到需要使用它的应用程序中。这种简单、灵活的方式,是 SQLite 被广泛应用于许多嵌入式设备的主要原因。

功能特性

SQLite 数据库是一种嵌入式数据库,其目标是尽量简单,因此抛弃了传统企业数据库的种种复杂特性,只实现了数据库的必备功能。尽管简单性是 SQLite 的首要目标,但其功能和性能依然十分出色,具体功能特性如下:

  • 支持 ACID 事务,允许多个进程或线程同时进行安全访问;
  • 零配置,不需要任何管理性的配置过程;
  • 支持 SQL92 标准的大多数查询语言功能;
  • 所有数据存放在单独的文件中,支持的最大文件可达 2TB;
  • 数据库可以在不同字节的机器间共享;
  • 体积小、轻量级,完全配置时小于 400KB(裁剪后可达 250 KB 以下);
  • 系统开销小,检索效率高;
  • 提供简单易用的 API 接口;
  • 可以与 Python、C/C++、Java、Ruby、Perl、PHP 等多个编程语言绑定;
  • 自包含,不依赖于外部支持;
  • 开源,可用于任何合法途径。

设计理念

不像常见的客户端/服务器结构(C/S)数据库管理系统,SQLite 引擎不是一个应用程序与之通信的独立进程。SQLite 库链接到程序中,并成为它的一个组成部分。当然,这个库也可被动态链接。

应用程序经由编程语言内的直接 API 调用来使用 SQlite 的功能,这在减少数据库访问延迟上有积极作用,因为在一个单一进程中的函数调用比跨进程通信更有效率。SQLite 将整个数据库,包括定义、表、索引以及数据本身,作为一个单独的、可跨平台使用的文件存储在主机中。它采用了在写入数据时将整个数据库文件加锁的简单设计。尽管写操作只能串行进行,但 SQLite 的读操作可以多任务同时进行。

SQLite 将 PostgreSQL 作为参考平台。项目将“PostgreSQL可能做些什么”作为 SQL 标准实现的开发参考。然而与这个目标最重要的偏差在于,除了主键以外,SQLite 不强制进行类型检查。一个值的类型是动态的,不被 schema 所强制限制(虽然如此,但如果可以进行可恢复的类型转换时,schema 会在存储数据时触发一个自动转换)。

使用特点

SQLite 程序库实现了多数的 SQL-92 标准,包括事务,以及实现原子性、一致性、隔离性和持久性(即 ACID),但它缺失了某些特性。例如,它仅部分支持触发器。尽管它支持大多数的复杂查询,但它的 ALTER TABLE 功能有所限制,不能修改或删除列,只能通过重新创建表的方式迂回进行。

SQLite 不进行类型检查。你可以把字符串插入到整数列中。某些用户发现这是使数据库更加有用的创新,特别是与无类型的脚本语言一起使用的时候;然而其他用户认为这是主要的缺点。

多个进程或线程可以同时访问同一个数据而没有问题。可以同时平行读取同一个数据库。但同一时间只能有一个进程或线程进行数据写入;否则会写入失败并得到一个错误消息(或者会自动重试一段时间;自动重试的逻辑以及重试时间的长短是可以设置的)。

程序设计者还提供了一个叫做 sqlite3 的独立程序用来查询和管理 SQLite 数据库文件。SQLite 的用户可以把这个程序当作如何写 SQLite 应用程序的示例。

相关链接