SQLite引擎不是個程序與之通信的獨立進程,而是連接到程序中成為它的一個主要部分。所以主要的通信協議是在編程語言內的直接API調用。這在消耗總量、延遲時間和整體簡單性上有積極的作用。
SQLite,是一款輕型的數據庫,是遵守ACID的關聯式數據庫管理系統,它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統,同時能夠跟很多程序語言相結合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數據庫管理系統來講,它的處理速度比他們都快。SQLite第一個Alpha版本誕生于2000年5月。 至今已經有12個年頭,SQLite也迎來了一個版本 SQLite 3已經發布。
SQLite是遵守ACID的關系型數據庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域項目。
不像常見的客戶-服務器范例,SQLite引擎不是個程序與之通信的獨立進程,而是連接到程序中成為它的一個主要部分。所以主要的通信協議是在編程語言內的直接API調用。這在消耗總量、延遲時間和整體簡單性上有積極的作用。整個數據庫(定義、表、索引和數據本身)都在宿主主機上存儲在一個單一的文件中。它的簡單的設計是通過在開始一個事務的時候鎖定整個數據文件而完成的。
SQLite特性
1. ACID事務
2. 零配置 – 無需安裝和管理配置
3. 儲存在單一磁盤文件中的一個完整的數據庫
4. 數據庫文件可以在不同字節順序的機器間自由的共享
5. 支持數據庫大小至2TB
6. 足夠小, 大致3萬行C代碼, 250K
7. 比一些流行的數據庫在大部分普通數據庫操作要快
8. 簡單, 輕松的API
9. 包含TCL綁定, 同時通過Wrapper支持其他語言的綁定
10. 良好注釋的源代碼, 并且有著90%以上的測試覆蓋率
11. 獨立: 沒有額外依賴
12. Source完全的Open, 你可以用于任何用途, 包括出售它
13. 支持多種開發語言,C, PHP, Perl, Java, C#,Python, Ruby
SQLite功能
SQLite雖然很小巧,但是支持的SQL語句不會遜色于其他開源數據庫,它支持的SQL包括:
ATTACH DATABASE
BEGIN TRANSACTION
comment
COMMIT TRANSACTION
COPY
CREATE INDEX
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
DELETE
DETACH DATABASE
DROP INDEX
DROP TABLE
DROP TRIGGER
DROP VIEW
END TRANSACTION
EXPLAIN
expression
INSERT
ON CONFLICT clause
PRAGMA
REPLACE
ROLLBACK TRANSACTION
SELECT
UPDATE
同時它還支持事務處理功能等等。也有人說它象Microsoft的Access,有時候真的覺得有點象,但是事實上它們區別很大。比如SQLite 支持跨平臺,操作簡單,能夠使用很多語言直接創建數據庫,而不象Access一樣需要Office的支持。如果你是個很小型的應用,或者你想做嵌入式開發,沒有合適的數據庫系統,那么現在你可以考慮使用SQLite。目前它的最新版本是 3.7.8 。它的官方網站是:http://www.sqlite. org或者http://www.sqlite .com .cn,能在上面獲得源代碼和文檔。同時因為數據庫結構簡單,系統源代碼也不是很多,也適合想研究數據庫系統開發的專業人士
SQLite類型
SQLite的數據類型
首先你會接觸到一個讓你驚訝的名詞: Typelessness(無類型). 對! SQLite是無類型的. 這意味著你可以保存任何類型的數據到你所想要保存的任何表的任何列中, 無論這列聲明的數據類型是什么(只有在一種情況下不是, 稍后解釋). 對于SQLite來說對字段不指定類型是完全有效的. 如:
Create Table ex1(a, b, c);
誠然SQLite允許忽略數據類型, 但是仍然建議在你的Create Table語句中指定數據類型. 因為數據類型對于你和其他的程序員交流, 或者你準備換掉你的數據庫引擎時能起到一個提示或幫助的作用. SQLite支持常見的數據類型, 如:
CREATE TABLE ex2(
a VARCHAR(10),
b NVARCHAR(15),
c TEXT,
d INTEGER,
e FLOAT,
f BOOLEAN,
g CLOB,
h BLOB,
i TIMESTAMP,
j NUMERIC(10,5)
k VARYING CHARACTER (24),
l NATIONAL VARYING CHARACTER(16)
);
前面提到在某種情況下, SQLite的字段并不是無類型的. 即在字段類型為”Integer Primary Key”時.
SQLite語言綁定
可以從C/C++程序中使用這個庫,還可以獲得對Tcl和一些其他腳本語言的綁定。
在CPAN的DBD::SQLite上有一個Perl的DBI/DBD模塊,它不是到SQLite的接口,而是包括整個SQLite數據庫引擎在其中并不需要任何額外的軟件。
還有一個Python模塊叫做PySQLite。
PHP從PHP5.0開始包含了SQLite,但是自5.1版之后開始成為一個延伸函式庫。SQLite能與PHP4一起工作但不包含在其中。
Rails2.0.3將缺省的數據庫配置改為了SQLite 3。
SQLite亦可以作為桌面數據庫使用,以下為第三方SQLite的GUI軟件。例如,
SQLiteMan,使用QT開發的一個SQLite客戶端,支持多語言、跨平臺。SQLiteMan
SQLite Manager, 以 火狐瀏覽器的擴展形式提供的SQLite客戶端。
SQLite Database Browser, a graphical client to access SQLite databases
SqlPro SQL Client, another graphical client to work with SQLite databases。
SQLite版本發布
2010年08月09日,SQLite 數據庫發布 3.7.0.1 版本,該版本改進內容:
修正了一個潛在的數據庫崩潰的問題,這個問題產生于 3.7.0 和 3.6.23.1 版本的程序所生成的文件
修正了自動重建索引可能導致的性能問題。
2010年10月19日,SQLite 3.7.3 發布,關系數據庫,該版本增加了 sqlite3_create_function_v2() 接口,用以處理析構器(destructor)的回調;通過使用應用提供的回調函數來定義查詢區域的邊界以增加對自定義 r-tree 查詢;默認的頁緩存努力避免內存分配大于預設SQLITE_CONFIG_PAGECACHE的值等。