iOS 開發(fā)中建立索引并查詢
以下我們就建立數(shù)據(jù)庫、建立資料表及索引、新增資料、查詢資料、更改資料、移除資料、
sqlite3
命令列選項等幾個項目做簡單的介紹。
目錄
1 建立數(shù)據(jù)庫檔案
2 在
sqlite3
提示列下操作
3 SQL的指令格式
4 建立資料表
5 建立索引
6 加入一筆資料
7 查詢資料
8 如何更改或刪除資料
9 其他sqlite的特別用法
10 小結(jié)
建立數(shù)據(jù)庫檔案
用 sqlite3 建立數(shù)據(jù)庫的方法很簡單,只要在shell下鍵入(以下$符號為shell提示號,請勿鍵入):
sqlite3
foo.db
如果目錄下沒有foo.db,
sqlite3
就會建立這個數(shù)據(jù)庫。
sqlite3
并沒有強制數(shù)據(jù)庫檔名要怎么取,因此如果你喜歡,也可以取個例如foo.icannameitwhateverilike的檔名。
在 sqlite3 提示列下操作
進入了
sqlite3
之后,會看到以下文字:
- SQLite version 3.1.3
- Enter “.help” for instructions
sqlite>
這時如果使用.help可以取得求助,.quit則是離開(請注意:不是quit)
SQL的指令格式
所以的SQL指令都是以分號(;)結(jié)尾的。如果遇到兩個減號(–)則代表注解,
sqlite3
會略過去。
建立資料表
假設(shè)我們要建一個名叫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數(shù)據(jù)庫軟件不同的是,它不在乎字段屬于哪一種資料型態(tài):
sqlite3
的字段可以儲存任何東西:文字、數(shù)字、大量文字(blub),它會在適時自動轉(zhuǎn)換。
建立索引
如果資料表有相當多的資料,我們便會建立索引來加快速度。好比說:
- 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
會在針對該字段作查詢時,自動使用該索引。這一切的操作都是在幕后自動發(fā)生的,無須使用者特別指令。
加入一筆資料
接下來我們要加入資料了,加入的方法為使用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;
最常見的用法,當然是倒出所有數(shù)據(jù)庫的內(nèi)容:
- select * from film;
如果資料太多了,我們或許會想限制筆數(shù):
- 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年、年份晚的優(yōu)先列出、最多十筆,只列出電影名稱和年份:
- select title, year from film where starring like ‘Jodie%’ and year >= 1985 order by year desc limit 10;
有時候我們只想知道數(shù)據(jù)庫一共有多少筆資料:
- select count(*) from film;
有時候我們只想知道1985年以后的電影有幾部:
- select count(*) from film where year >= 1985;
(進一步的各種組合,要去看SQL專書,不過你大概已經(jīng)知道SQL為什么這么流行了:這種語言允許你將各種查詢條件組合在一起──而我們還沒提到「跨數(shù)據(jù)庫的聯(lián)合查詢」呢?。?/p>
如何更改或刪除資料 了解select的用法非常重要,因為要在sqlite更改或刪除一筆資料,也是靠同樣的語法。
例如有一筆資料的名字打錯了:
- update film set starring=’Jodie Foster’ where starring=’Jodee Foster’;
就會把主角字段里,被打成’Jodee Foster’的那筆(或多筆)資料,改回成Jodie Foster。
- delete from film where year < 1970;
就會刪除所有年代早于1970年(不含)的電影了。
其他sqlite的特別用法
sqlite可以在shell底下直接執(zhí)行命令:
sqlite3
- film.db “select * from film;”
輸出 HTML 表格:
sqlite3
- -html film.db “select * from film;”
將數(shù)據(jù)庫「倒出來」:
sqlite3
- film.db “.dump” > output.sql
利用輸出的資料,建立一個一模一樣的數(shù)據(jù)庫(加上以上指令,就是標準的SQL數(shù)據(jù)庫備份了):
sqlite3
- film.db < output.sql
在大量插入資料時,你可能會需要先打這個指令:
begin;
插入完資料后要記得打這個指令,資料才會寫進數(shù)據(jù)庫中:
commit;