SQLite
SQLite(/ˌɛskjuːɛlˈlaɪt/[6]或/ˈsiːkwəl.laɪt/[7])是遵守ACID的关系数据库管理系统,它包含在一个相对小的C程式庫中。与许多其它数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中。
開發者 | D. Richard Hipp |
---|---|
首次发布 | 2000年8月17日[2] |
当前版本 |
|
源代码库 | |
编程语言 | ANSI C[1] |
操作系统 | 跨平台[1] |
文件大小 | 小于600KiB[1] |
语言 | 英语 |
类型 | 关系型数据库(嵌入式) |
许可协议 | 公有领域[4] |
网站 | sqlite |
扩展名 |
.sqlite, .sqlite3, .db, .db3, .s3db, .sl3 |
---|---|
互联网媒体类型 | application/vnd.sqlite3 [5] |
首次发布 | 2004-06-18 |
自由格式? | 是的(共有领域) |
网站 | www |
SQLite遵守ACID,实现了大多数SQL标准。它使用动态的、弱类型的SQL语法。[8]它作为嵌入式数据库,是应用程序,如网页浏览器,在本地/客户端存储数据的常见选择。它可能是最广泛部署的数据库引擎,因为它正在被一些流行的浏览器、操作系统、嵌入式系统所使用[9]。同时,它有许多程序设计语言的语言绑定。
SQLite是D. Richard Hipp建立的公有领域项目。[4]
设计
编辑不像常见的客户端/服务器结构数据库管理系统,SQLite引擎不是一个应用程序与之通信的独立进程。SQLite库链接到程序中,并成为它的一个组成部分。这个库也可被动态链接。应用程序经由编程语言内的直接API调用来使用SQlite的功能,这在减少数据库访问延迟上有积极作用,因为在一个单一进程中的函数调用比跨进程通信更有效率。SQLite将整个数据库,包括定义、表、索引以及数据本身,作为一个单独的、可跨平台使用的文件存储在主机中。它采用了在写入数据时将整个数据库文件加锁的简单设计。尽管写操作只能串行进行,但SQLite的读操作可以多任务同时进行。
SQLite将PostgreSQL作为参考平台。项目将“PostgreSQL可能做些什么”作为SQL标准实现的开发参考。[10][11]然而与这个目标最重要的偏差在于,除了主键以外,SQLite不强制进行类型检查。一个值的类型是动态的,不被schema所强制限制(虽然如此,但如果可以进行可恢复的类型转换时,schema会在存储数据时触发一个自动转换)。
特征
编辑程式庫实现了多数的SQL-92标准,包括事务,以及实现原子性、一致性、隔離性和持久性(即ACID),但它缺失了某些特性。例如,它仅部分支持触发器。尽管它支持大多数的复杂查询,但它的ALTER TABLE功能有所限制,不能修改或删除列,只能通过重新建立表的方式迂回进行。
SQLite不进行类型检查。你可以把字符串插入到整数列中。某些用户发现这是使数据库更加有用的创新,特别是与无类型的脚本语言一起使用的时候;然而其他用户认为这是主要的缺点。
多个进程或线程可以同時存取同一个数据而没有问题。可以同時平行讀取同一個資料庫。但同一時間只能有一個进程或线程進行資料寫入;否则會寫入失敗並得到一個錯誤訊息(或者會自動重試一段時間;自动重试的逻辑以及重試時間的長短是可以設定的)。
程式設計者還提供了一個叫做sqlite3的独立程序用来查询和管理SQLite数据库文件。SQLite的使用者可以把這個程式當作如何寫SQLite應用程式的範例。
语言绑定
编辑目前有大量的编程语言提供使用SQLite的绑定,包括:
- C/C++[12]
- C#與VB.Net[13]以Mono實作,需要.NET Framework4.0以上版本,並支援Entity Framework
- Tcl[14]
- 在CPAN的DBD::SQLite上有一个Perl的DBI/DBD模块,它不是到SQLite的接口,而是包括整个SQLite数据库引擎在其中并不需要任何额外的软件。
- Python自2.5之后内置pysqlite[15],模块名为sqlite3(下載的package名為pysqlite3)。[16]
- PHP从PHP 5.0开始已經包含SQLite,但是自5.1版之後,SQLite開始成為一個延伸函式庫。SQLite能与PHP4一起工作,但不包含在PHP4里面。
- Rails2.0.3将缺省的数据库配置改为了SQLite 3。
- Haskell[17]
- Java[18]
- Delphi: DISQLite3作为Delphi的一个第三方控件,不是SQLite的API,也不是接口,而是把SQLite数据库引擎重新封装编译到Delphi的目标程序中。
SQLite管理客户端
编辑SQLite亦可以作為桌面資料庫使用,以下為第三方SQLite的GUI軟體。例如,
- Navicat for SQLite是一套專為SQLite設計的強大資料庫管理及開發工具。它可以用於任何版本2或3的SQLite資料庫,並支援大部份SQLite的功能,包括觸發器、索引、檢視等。
- SQLiteMan,使用Qt开发的一个SQLite客户端,支持多语言、跨平台。
- Firefox,可以藉由安裝擴充套件成為SQLite客户端管理工具,包括SQLite Manager、SQLite Reader、SQLite Manager[19](另一個同名的WebExtensions擴充套件)。
- SQLite Database Browser,一款连接SQLite数据库的图形客户端。
- SQLite Expert Personal,Windows上的一款连接SQLite数据库的免费客户端。
- Database .NET[20],一套適用於 Windows 平台的免安裝綠色軟體,支援多種視覺化資料庫管理工具,除了 SQLite 之外也支援 Microsoft SQL Server、SQL Azure、MySQL、Oracle、IBM DB2、Informix、PostgreSQL、HP Vertica、NuoDB、Teradata、Sybase ASE、Firebird、Access、Excel、DBase、SQLCe... 等資料庫軟體。
参考文献
编辑- ^ 1.0 1.1 1.2 Features Of SQLite. SQLite.org. [2018-09-19]. (原始内容存档于2018-09-19).
- ^ History Of SQLite Releases. SQLite.org. [2018-09-19]. (原始内容存档于2018-09-19).
- ^ SQLite Release 3.47.2 On 2024-12-07. [2024年12月8日].
- ^ 4.0 4.1 SQLite Copyright. sqlite.org. [May 17, 2010]. (原始内容存档于2015-12-17).
- ^ SQLite数据库文件格式在IANA的媒体类型. Internet Assigned Numbers Authority. IANA. [2019-03-08]. (原始内容存档于2022-11-09).
- ^ D. Richard Hipp (presenter). An Introduction to SQLite (video). Google Inc. 事件发生在 00:01:14. May 31, 2006 [March 23, 2010]. (原始内容存档于2015-11-27).
[...] ess-kju-ellite [...]
- ^ D. Richard Hipp (presenter). An Introduction to SQLite. Google Inc. 事件发生在 00:48:15. May 31, 2006 [March 23, 2010]. (原始内容存档于2015-11-27).
[...] sequelite [...]
- ^ Owens, Michael. Chapter 4: SQL. Gilmore, Jason; Thomas, Keir (编). The Definitive Guide to SQLite. D. Richard Hipp (foreword), Preston Hagar (technical reviewer). Apress. 2006: 133 [30 December 2014]. ISBN 978-1-59059-673-9. (原始内容存档于2020-11-24).
- ^ Most Widely Deployed SQL Database Estimates. Sqlite.org. [May 11, 2011]. (原始内容存档于2015-07-17).
- ^ 存档副本. [2015-06-25]. (原始内容存档于2015-06-29).
- ^ 存档副本. [2015-06-25]. (原始内容存档于2014-12-30).
- ^ An Introduction To The SQLite C/C++ Interface. sqlite.org. [Jan 22, 2016]. (原始内容存档于2016-02-05).
- ^ System.Data.SQLite official site. sqlite.org.
- ^ The Tcl interface to the SQLite library. sqlite.org. [Jan 22, 2016]. (原始内容存档于2016-01-29).
- ^ pysqlite(页面存档备份,存于互联网档案馆)
- ^ sqlite3 — DB-API 2.0 interface for SQLite databases. python.org. [Jan 22, 2016]. (原始内容存档于2012-10-18).
- ^ sqlite: Haskell binding to sqlite3. [Jan 22, 2016]. (原始内容存档于2016-01-28).
- ^ SQLite Java Wrapper/JDBC Driver. [Jan 22, 2016]. (原始内容存档于2016-01-25).
- ^ SQLite Manager(页面存档备份,存于互联网档案馆)
- ^ Database .NET(页面存档备份,存于互联网档案馆)
參閱
编辑外部链接
编辑- SQLite主页(页面存档备份,存于互联网档案馆)
- pysqlite(页面存档备份,存于互联网档案馆)
- DBD::SQLite - CPAN上的Perl模块。
- Sqlite-ruby - Ruby语言接口。
- SQLiteManager(页面存档备份,存于互联网档案馆) - 管理SQLite数据库的多语言的PHP4写的web工具。
- SQLite Developer(页面存档备份,存于互联网档案馆) - SQLite可视化数据库管理器。
- SQLiteBrowser(页面存档备份,存于互联网档案馆) - 視窗介面SQLite資料庫瀏覽器
- SQLite ODBC驱动程序
- SQLite Administrator(页面存档备份,存于互联网档案馆)
- SQLite.NET 2.0 - An ADO.NET 2.0 provider for SQLite
- Using SQLite Database with OpenOffice.org(via ODBC or *sqlite-sdbc-driver(页面存档备份,存于互联网档案馆))
- Interview with Richard Hipp
- SQLite with Python tutorial
- Database.NET(页面存档备份,存于互联网档案馆) - 視覺化資料庫管理工具,支援多種資料庫且免安裝。