1 嵌入式數(shù)據(jù)庫簡介----SQLite
2 SQLite介紹 綱要
SQLite的發(fā)展
SQLite的優(yōu)勢
SQLite的缺憾
SQLite的內(nèi)部結(jié)構
SQLite數(shù)據(jù)庫的使用
SQLite的命令行接口
SQLite命令行使用
SQLite數(shù)據(jù)庫的編程接口
C/C++接口
簡單應用
自定義簡單函數(shù)
自定義聚合函數(shù)
自定義排序函數(shù)
PERL接口
SQLite數(shù)據(jù)庫在ASTRAL中的應用
SQLite在多級關聯(lián)中的應用
SQLite在IPIS中的應用
SQLite在web中的應用
3 SQLite的發(fā)展
2000年由D.Richard Hipp開始開發(fā)
2001年發(fā)布2.0v
2004年發(fā)布3.0v(采用了不同的數(shù)據(jù)文件格式以及編程接口)
目標
易于管理、操作、維護、自定義以及提供易用的編程接口
4 SQLite的優(yōu)勢
內(nèi)存占用量小
比MySQL(2倍), PostgreSQL(20倍)快
ACID兼容(原子性,一致性,獨立性,可持久性),支持視圖,子查詢,觸發(fā)器
單個庫文件中包含數(shù)據(jù)庫引擎與接口,且其運行不依賴其它庫
可以將數(shù)據(jù)放進單個文件
為C/C++, Perl,PHP等應用提供了接口
免費
允許為SQL命令集動態(tài)添加自定義函數(shù)(簡單函數(shù)及聚集函數(shù)),而無需重編SQLite庫
5 SQLite的缺點
事務處理并發(fā)性
SQLite通過數(shù)據(jù)庫級上的獨占性和共享鎖來實現(xiàn)獨立事務處理,這意味著當多個進程或線程在同一時間可以從數(shù)據(jù)庫讀取數(shù)據(jù),但是只能有一個可以同時寫入,在寫入之前,必須獲得獨占鎖,其它的讀操作不允許發(fā)生。
性能
在創(chuàng)建索引( CREATE INDEX)和刪除表( DELTE TABLE)時明顯比其它數(shù)據(jù)庫慢
用戶管理/安全
數(shù)據(jù)庫的訪問是基于操作系統(tǒng)對文件的控制來控制的,不能通過用戶來區(qū)分數(shù)據(jù)庫中的不同數(shù)據(jù)庫.
舉例,將數(shù)據(jù)庫文件去寫權限,然后向其中插入或刪除數(shù)據(jù)條目,將提示寫失敗。但是不能通過數(shù)據(jù)庫本身的來對權限進行設置。
在網(wǎng)上已經(jīng)有一些SQLite的安全問題的解決方案,但大多數(shù)是商業(yè)化的,有些提供在整個數(shù)據(jù)庫上的加密,有些提供在數(shù)據(jù)級別的加密。比如secure SQLite之類。
6 SQLite的內(nèi)部結(jié)構
在內(nèi)部,SQLite 由以下幾個組件組成:SQL 編譯器、內(nèi)核、后端以及附件。SQLite 通過利用虛擬機和虛擬數(shù)據(jù)庫引擎(VDBE),使調(diào)試、修改和擴展 SQLite 的內(nèi)核變得更加方便。所有 SQL 語句都被編譯成易讀的、可以在 SQLite 虛擬機中執(zhí)行的程序集。
7 SQLite數(shù)據(jù)庫的使用
SQLite命令行接口
SQLite除庫本身外,還包含命令行接口,可以在$SQLITE_HOME/bin下發(fā)現(xiàn)sqlite/sqlite3,
命令行功能介紹
運行方式:sqlite DBFile
得到提示符sqlite>
運行.help(注意sqlite命令行提供的命令都以”.”開頭,可以看到sqlite命令行接口提供下面的功能.
8 SQLite命令行功能簡介
SQLite命令行功能簡介
DML/DDL語句的使用和以前一致,不做介紹
.databases 列出數(shù)據(jù)庫文件名
.tables ?PATTERN? 列出?PATTERN?匹配的表名
.import FILE TABLE 將文件中的數(shù)據(jù)導入的文件中
.dump ?TABLE? 生成形成數(shù)據(jù)庫表的SQL腳本
.output FILENAME 將輸出導入到指定的文件中
.output stdout 將輸出打印到屏幕
.mode MODE ?TABLE? 設置數(shù)據(jù)輸出模式(csv,html,tcl…
.nullvalue STRING 用指定的串代替輸出的NULL串
.read FILENAME 執(zhí)行指定文件中的SQL語句
.schema ?TABLE? 打印創(chuàng)建數(shù)據(jù)庫表的SQL語句
.separator STRING 用指定的字符串代替字段分隔符
.show 打印所有SQLite環(huán)境變量的設置
.quit 退出命令行接口
9 SQLite命令行功能使用
下面舉例說明SQLITE命令行的常規(guī)使用:
SQLite數(shù)據(jù)導入
創(chuàng)建數(shù)據(jù)文件
這個文件可能來自其它的其它程序的輸出之類,現(xiàn)只我們手功創(chuàng)建下面的數(shù)據(jù)文件data.txt(用逗號分隔):
id, name,gender, age
1,dq,male,24
2,jz,female,27
3.pp,male,26
4,cj,male,28
5,zc,male,25
創(chuàng)建數(shù)據(jù)庫表
五種數(shù)據(jù)類型
TEXT,NUMERIC,INTEGER,REAL,NONE
數(shù)據(jù)類型的轉(zhuǎn)換
向保存的目標類型轉(zhuǎn)換,如將text保存到integer,則試著將文件轉(zhuǎn)為數(shù)字(int或float),如果轉(zhuǎn)換失敗,則做為文件保存.
數(shù)據(jù)庫表創(chuàng)建
shell> sqlite3 test.db
sqlite> create table employee( id integer primary key, name text, gender text, age integer );
10 SQLite命令行功能使用
數(shù)據(jù)導入
sqlite>.import data.txt employee
sqlite提示:data.txt line1:expected 4 coloumns of data but found 1;
從經(jīng)驗應該能看出是字符分隔符有問題,先來看看系統(tǒng)用什么樣的提示符:
.show之后可以看到 separator: “|”,也就是說系統(tǒng)默認的分隔符為”|”面不是”,”,下面修改分隔字符:
sqlite>.separator “,”
sqlite>.import data.txt employee
sqlite> select * from employee where id > 2;
sqlite> select * from employee where name > 9999999999999;
上面這句用來說明text>integer(這個和比較字符的內(nèi)碼得到的結(jié)果是相同的)
數(shù)據(jù)比較
NULL數(shù)字之間用數(shù)學比較方法比較
TEXT/BLOB用memcpy()進行比較
比較方法是可以自已定義或者重載的(我們將在后面提及中文字串的比較)
Ex: sqlite> select id >2, name > ‘dong’, gender=‘male’ from employee;
0,1,1
0,1,0
1,1,1
1,0,1
1,1,1
新聞熱點
疑難解答
圖片精選