2009年3月3日 星期二

SQLite 簡介 (1)

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。


沒有留言:

張貼留言