From http://support.oss.org.tw/?q=node/157
介紹
資料庫在處理大量的資料上是很必要的,但如果資料固定且量不多,或是資料庫只會在單機上使用,且沒有讓多人使用的需求的話,就不一定需要特別架一個資料庫
系統;因此,可以使用類似 SQLite 這樣的嵌入式資料庫(embedded SQL database)。
SQLite 與其他一般資料庫差異不大,一般的 SQL-92
語法都能夠使用,而且不需要建立一個資料庫系統,要使用的時候,只要在編譯程式的時候將 SQLite 程式庫一起編入就可以使用。另外,SQLite
的資料庫(database)都是以單一檔案的形式存於磁碟中,不需要再安裝資料庫伺服器軟體,所以要把資料庫複製或建立在你的電腦上是相單簡單快速。
SQLite 是一個很小的 C 語言程式庫,且本身就完全包含資料庫引擎的功能,而且可以嵌入至其他程式中,完全不用額外的設定。其特性如下:
- 支援ACID (Atomic, Consistent, Isolated, Durable) transaction。
- Zero-configuration:無須管理者的設定及管理。
- 支援大部分SQL92的語法。
- 資料庫存在於一個單一的檔案中。
- 資料庫系統所在機器的位元組順序(Byte order)無關。
- 支援大小至2 terabytes (2^41 bytes)。
- 記憶體需求小:小於3萬行的C語言程式碼。小於250KB的程式空間。
- 大部分的資料庫操作皆快於一般資料庫系統。
- 簡單易用的API。
- 支援TCL。也有其他語言的支援可用。
- 註解詳細的程式碼,以及超過90%的測試。
- 程式庫自己包含完整的功能,無須其他額外的程式或程式庫。
- 為public domain,可免費使用。
- serverless
- cross-platform - 使用unicode
- 不會進行data type檢查
安裝
for Linux(rpm)
I、下載 SQLite
# wget http://www.sqlite.org/sqlite-3.5.4.tar.gz
2、解壓縮與編譯
# tar zxvf sqlite-3.5.4.tar.gz
# cd sqlite-3.5.4
# ./configure
# make
# make install
ps.若make的時候有發生找不到tcl相關的library時,可以利用下列指令:
# ./configure --disable-tcl --prefix=/usr/local/sqlite-3.3.5
亦或者下載 sqlite 與 tcl 相關的 library 即可:
# apt-get install libsqlite3-tcl
for linux(套件管理程式安裝)
可以利用 apt-get(Ubuntu/Debian)或 yum(Fedora)來直接下載,
# apt-get install sqlite
若 SQLite 要與 PHP 搭配使用,則需要為 PHP 特別安裝套件,可利用各個 distros 的套件管理軟體來安裝(以Ubuntu為例):
- for PHP4:
# apt-get install php4-sqlite
- for PHP5:
# apt-get install php5-sqlite
for Windows
若要下載命令列模式的 SQLite 程式來存取與修改 SQLite 資料庫,可以至(http://www.sqlite.org/download.html)下載預先編譯過的程式。
for PHP 4:
1、到這裡(http://pecl4win.php.net/ext.php/php_sqlite.dll)下載 php_sqlite.dll
2、php.ini 加上 extension=php_sqlite.dll
3、重新啟動 Web Server 即可。
forPHP 5:
PHP 5 已經包含 SQLite 模組了,所以只需要載入模組即可。
修改 php.ini,將 ;extension=php_sqlite.dll 將前面的分號去掉。
最後一樣重新啟動 Web Server 即可。
如何使用sqlite(command-line)
以下我們就對建立資料庫、建立資料表、新增資料、查詢資料、更改資料、移除資料、sqlite 命令列選項等幾個項目做簡單的介紹。
1、建立資料庫檔案
用 sqlite 建立資料庫的方法很簡單,只要在 shell 下鍵入:
# sqlite db_name
如果目錄下沒有 db_name,sqlite 就會建立這個資料庫。
進入了sqlite之後,會看到以下文字:
SQLite version 2.8.17
Enter ".help" for instructions
sqlite>
這時如果使用.help可以取得求助,.quit則是離開
所有的SQL指令都是以分號(;)結尾的。如果遇到兩個減號(--)則代表註解,sqlite 會略過去。
2、建立資料表(table)
假設我們要建一個名叫 tbl 的資料表,只要鍵入以下指令就可以了:
sqlite > create table tbl(one, two);
這樣我們就建立了一個名叫 tbl 的資料表,裡面有 one、two 兩個欄位。
create table指令的語法為:
create table table_name(field1, field2, field3, ...);
table_name 是資料表的名稱,fieldx 則是欄位的名字。sqlite 的欄位不會檢查是屬於哪一種資料型態:sqlite的欄位可以儲存任何東西:文字、數字、大量文字(blob),它會在適時自動轉換。
3、加入一筆資料
接下來我們要加入資料了,語法為:
insert into table_name values(data1, data2, data3, ...);
例如
insert into tbl values ('hello!', 10);
insert into tbl values ('goodbye’, 20);
如果該欄位沒有資料,我們可以填NULL。
4、查詢資料
利用 SQL 語法裡的 select :
select columns from table_name where expression;
最常見的用法,當然是倒出所有資料庫的內容:
select * from tbl;
如果資料太多了,我們或許會想限制筆數:
select * from tbl limit 10;
有時候我們只想知道資料庫一共有多少筆資料:
select count(*) from film;
5、如何更改或刪除資料
瞭解 select 的用法非常重要,因為要在 sqlite 更改或刪除一筆資料,也是靠同樣的語法。
例如有一筆資料打錯了,可利用這樣的指令來修改:
update tbl set one = 'hello!' where one='hollo!';
就會把one欄位裡,被打成 hollo! 的那筆(或多筆)資料,改回成hello!。
其他 sqlite 的特別用法
1、sqlite 可以在 shell 底下直接執行命令:
sqlite3 foo.db "select * from tbl;"
2、資料庫備份:
sqlite3 ur_db.db ".dump" > output.sql
或
$ echo '.dump' | sqlite ur_db.db | gzip -c > ur_db.dump.gz
利用輸出的資料,可以建立一個相同的資料庫(其實就是標準的SQL資料庫備份):
sqlite3 film.db < output.sql
或
$ zcat ex1.dump.gz | sqlite3 ex2
3、查詢資料庫的 schema
資料庫的 schema 是特別存於名為 sqlite_master 的資料表,可利用 "SELECT" 指令來查詢,如下所示:
$ sqlite3 db_name
SQlite vresion 2.817
Enter ".help" for instructions
sqlite> select * from sqlite_master;
type = table
name = tbl
tbl_name = tbl
rootpage = 3
sql = create table tbl(title, length)
sqlite>
4、更改輸出的格式
sqlite 能夠將查詢的結果以8種不同的格式輸出(csv、column、html、insert、line、tabs、tcl),你可以利用指令
"mode" 來改變輸出格式,預設的格式為 list ,在這個模式下,查詢的結果都是一行一行列出,而預設的分隔符號為 "|" ,如下所示:
sqlite> .mode list
sqlite> select * from tbl;
aaa|232
bbb|454
你也可以利用指令 ".separator" 來改變分隔符號,例如:
sqlite> .separator ", "
sqlite> select * from tbl;
aaa, 232
bbb, 454
sqlite>
在 "line" 模式中,每一個欄位都會獨自與一行顯示出來,而每一筆資料會以一個空行來分隔,如下所示:
sqlite> .mode line
sqlite> select * from tbl;
title = aaa
length = 232
title = bbb
length = 454
sqlite>
在 column 模式中,每一筆資料都會顯示於獨立的一列,並且以欄位來分隔,如下所示:
sqlite> .mode column
sqlite> select * from tbl;
title length
---------- ----------
aaa 232
bbb 454
sqlite>
另外一個有用的模式為 "insert",此模式的輸出格式類似於 SQL 語法中的 INSERT 格式,可用於日後要輸入資料於其他資料庫中:
sqlite> .mode insert
sqlite> select * from tbl;
INSERT INTO table VALUES('aaa',232);
INSERT INTO table VALUES('bbb',454);
sqlite>
最後一個輸出模式為 "html",此模式下 sqlite 會將查詢結果輸出為類似 XHTML 表格,如下所示:
sqlite> .mode html
sqlite> select * from tbl;
<TR><TH>title</TH><TH>length</TH></TR>
<TR><TD>aaa</TD>
<TD>232</TD>
</TR>
<TR><TD>bbb</TD>
<TD>454</TD>
</TR>
sqlite>
查詢資料庫的 schema
sqlite 提供很多方便且有用的指令來查詢資料庫的 schema:
列出資料庫中的資料表,利用 ".tables":
sqlite> .tables
tbl
sqlite>
".schema" 指令顯示出原來建立資料表與索引的指令,可以用於重建目前的資料庫用:
sqlite> .schema
create table tbl(title, length);
sqlite>
這邊就先介紹 SQLite 到這邊,我將會在下一篇說明如何在 PHP 上使用 SQLite。
沒有留言:
張貼留言