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