2010年5月15日 星期六
SQLite 小型資料庫
來源: http://support.oss.org.tw/?q=node/157 轉錄 來源: http://support.oss.org.tw/?q=node/164 介紹 資料庫在處理大量的資料上是很必要的,但如果資料固定且量不多,或是資料庫只會在單機上使用,且沒有讓多人使用的需求的話,就不一定需要特別架一個資料庫 系統;因此,可以使用類似 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>
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言