SQLite是简单的嵌入式关系型数据,因而与其他大型的关系型数据库的操作规则有很大的区别,本文是持续更新的关于SQLite的一些规则总结。
定义方面
自增字段
SQLite的自增字段只支持 INTEGER 类型,使用 AUTOINCREMENT
关键字
create table t1(id INTEGER PRIMARY KEY AUTOINCREMENT, ...); |
查询方面
TOP功能实现
SQLite数据库是没有实现类似与其他数据库的TOP语法的,但是并不意味着实现不了该功能,实现该功能依赖于另外一个关键字 limit
,配合实现前几条数据的功能,如最简单的
select * from table limit 0,1 |
抑或是采用条件的语法等等
select * from table where col = value order by id desc 0,5 |
联表查询
正常情况下联表查询类似下面的语法
select t1.c1,t2.c1 from t1,t2 where t1.xxx = t2.xxx and ... |
但实时上上面的查询是比较耗时的,一般建议采用 inner join
实现,性能会好很多,即
select t1.c1,t2.c2 from t1 inner join t2 on t1.xxx = t2.xxx and ... |
写入方面
插入或更新
很多时候在写数据的时候,需要判断数据库是否存在某个记录,如果存在则更新掉,在比如MSSQL中的实现语句类似与下面的例子
if not exists(select c1 from table ...) then |
SQLite不支持上面的语法,但是支持通过 Replace
实现,要求的是要插入的字段中与已有字段冲突,即某些字段设置了 UNIQUE
,但是插入了相同的值。在不冲突的情况下进行 INSERT
操作,在冲突的情况下删除所有冲突,然后新插入一条。
replace into table(...) values(...) |
语法基本和 INSERT
差不多。
注意此处并不是
UPDATE
操作,更新操作一般可以通过where
定位要更新的记录,同时也可以更新部分记录,未更新的列维持原值,不会被置空。
清空表
SQLite没有 TRUNCATE 命令,只能粗暴的执行
delete from table |
桌面工具
安利一个不错的桌面操作SQLite的客户端软件,SQLite Expert,有针对个人的 Personal 版本。