sqlite3

建立數據庫檔案

用sqlite3建立數據庫的方法很簡單,只要在shell下鍵入(以下$符號爲shell提示號,請勿鍵入):

$ sqlite3 foo.db

如果目錄下沒有foo.db,sqlite3就會建立這個數據庫。sqlite3並沒有強制數據庫檔名要怎麼取,因此如果你喜歡,也可以取個例如foo.icannameitwhateverilike的檔名。

 

在sqlite3提示列下操作

進入了sqlite3之後,會看到以下文字:

SQLite version 3.1.3

Enter ".help" for instructions

sqlite> 

這時如果使用.help可以取得求助,.quit則是離開(請注意:不是quit)

 

SQL的指令格式

所以的SQL指令都是以分號(;)結尾的。如果遇到兩個減號(--)則代表註解,sqlite3會略過去。

 

建立資料表

假設我們要建一個名叫film的資料表,只要鍵入以下指令就可以了:

create table film(title, length, year, starring);

這樣我們就建立了一個名叫film的資料表,裏面有name、length、year、starring四個字段。

這個create table指令的語法爲:

create table table_name(field1, field2, field3, ...);

table_name是資料表的名稱,fieldx則是字段的名字。sqlite3與許多SQL數據庫軟件不同的是,它不在乎字段屬於哪一種資料型態:sqlite3的字段可以儲存任何東西:文字、數字、大量文字(blub),它會在適時自動轉換。

 

建立索引

如果資料表有相當多的資料,我們便會建立索引來加快速度。好比說:

create index film_title_index on film(title);

意思是針對film資料表的name字段,建立一個名叫film_name_index的索引。這個指令的語法爲

create index index_name on table_name(field_to_be_indexed);

一旦建立了索引,sqlite3會在針對該字段作查詢時,自動使用該索引。這一切的操作都是在幕後自動發生的,無須使用者特別指令。

 

加入一筆資料

接下來我們要加入資料了,加入的方法爲使用insert into指令,語法爲:

insert into table_name values(data1, data2, data3, ...);

例如我們可以加入

insert into film values ('Silence of the Lambs, The', 118, 1991, 'Jodie Foster');

insert into film values ('Contact', 153, 1997, 'Jodie Foster');

insert into film values ('Crouching Tiger, Hidden Dragon', 120, 2000, 'Yun-Fat Chow');

insert into film values ('Hours, The', 114, 2002, 'Nicole Kidman');

如果該字段沒有資料,我們可以填NULL。

 

查詢資料

講到這裏,我們終於要開始介紹SQL最強大的select指令了。我們首先簡單介紹select的基本句型:

select columns from table_name where expression;

最常見的用法,當然是倒出所有數據庫的內容:

select * from film;

如果資料太多了,我們或許會想限制筆數:

select * from film limit 10;

或是照着電影年份來排列:

select * from film order by year limit 10;

或是年份比較近的電影先列出來:

select * from film order by year desc limit 10;

或是我們只想看電影名稱跟年份:

select title, year from film order by year desc limit 10;

查所有茱蒂佛斯特演過的電影:

select * from film where starring='Jodie Foster';

查所有演員名字開頭叫茱蒂的電影('%' 符號便是 SQL 的萬用字符):

select * from film where starring like 'Jodie%';

查所有演員名字以茱蒂開頭、年份晚於1985年、年份晚的優先列出、最多十筆,只列出電影名稱和年份:

select title, year from film where starring like 'Jodie%' and year >= 1985 order by year desc limit 10;

有時候我們只想知道數據庫一共有多少筆資料:

select count(*) from film;

有時候我們只想知道1985年以後的電影有幾部:

select count(*) from film where year >= 1985;

(進一步的各種組合,要去看SQL專書,不過你大概已經知道SQL爲什麼這麼流行了:這種語言允許你將各種查詢條件組合在一起──而我們還沒提到「跨數據庫的聯合查詢」呢!)

 

如何更改或刪除資料

瞭解select的用法非常重要,因爲要在sqlite更改或刪除一筆資料,也是靠同樣的語法。

例如有一筆資料的名字打錯了:

update film set starring='Jodie Foster' where starring='Jodee Foster';

就會把主角字段裏,被打成'Jodee Foster'的那筆(或多筆)資料,改回成Jodie Foster。

delete from film where year < 1970;

就會刪除所有年代早於1970年(不含)的電影了。

 

將結果寫到文件

默認情況下,sqlite3會將結果發送到標準輸出,你可以使用 ".output" 來改變,只是將輸出到的文件名作爲參數傳遞給.output,所有後面的查詢結果都會寫到文件裏。開頭使用 ".output stdout" 會再次寫到標準輸出,例如:

sqlite> .modelist 
sqlite> .separator| 
sqlite> .outputtest_file_1.txt 
sqlite> select * fromtb1; 
sqlite> .exit 
# cattest_file_1.txt 
hello|10
goodbye|20

 

其他sqlite的特別用法

sqlite可以在shell底下直接執行命令:

sqlite3 film.db "select * from film;"

輸出 HTML 表格:

sqlite3 -html film.db "select * from film;"

將數據庫「倒出來」:

sqlite3 film.db ".dump" > output.sql

利用輸出的資料,建立一個一模一樣的數據庫(加上以上指令,就是標準的SQL數據庫備份了):

sqlite3 film.db < output.sql

在大量插入資料時,你可能會需要先打這個指令:

begin;

插入完資料後要記得打這個指令,資料纔會寫進數據庫中:

commit;

發佈了74 篇原創文章 · 獲贊 1 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章