随着人类社会的发展,需要越来越多的和数据打交道,譬如,政府通常会关心每个城市的人口,年龄构成,犯罪率,税收等等,做生意的关心销售额,利润率等,所以不可避免的会发展出数据管理相关的技术。最近就了解了下数据库相关发展,然后在Mac下适用了一下sqlite3,下面记录使用过程。
Mac OSX其实已经默认支持了sqlite,相关应用位于
/usr/bin/sqlite3
$sqlite3 foo.db
可以看到如下提示
SQLite version 3.14.0 2016-07-26 15:17:14
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>
sqlite>create table film(title, length, year, starring);
这样就建立了一个名叫 film 的资料表,里面有 name、length、year、starring 四个字段。其语法为
create table table_name(field1, field2, field3, ...);
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 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');
查询内容,通过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 count(*) from film;
--想知道 1985 年以后的电影有几部:
select count(*) from film where year >= 1985;
更改或删除资料,譬如
update film set starring='Jodie Foster' where starring='Jodee Foster'; --就会把主角字段里,被打成'Jodee Foster'的那笔(或多笔)资料,改回成 Jodie Foster。
delete from film where year < 1970;
--就会删除所有年代早于 1970 年(不含)的电影了。
备份
## 将数据库「倒出来」:
sqlite3 film.db ".dump" > output.sql
## 利用输出的资料,建立一个一模一样的数据库(加上以上指令,就是标准的 SQL 数据库备份了):
sqlite3 film.db < output.sql