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(頁面存檔備份,存於互聯網檔案館) - 視覺化資料庫管理工具,支援多種資料庫且免安裝。