SQLite一些技巧

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 
insert into ... else update ...

SQLite不支持上面的语法,但是支持通过 Replace 实现,要求的是要插入的字段中与已有字段冲突,即某些字段设置了 UNIQUE,但是插入了相同的值。在不冲突的情况下进行 INSERT 操作,在冲突的情况下删除所有冲突,然后新插入一条。

replace into table(...) values(...)

语法基本和 INSERT 差不多。

注意此处并不是 UPDATE 操作,更新操作一般可以通过 where 定位要更新的记录,同时也可以更新部分记录,未更新的列维持原值,不会被置空。

清空表

SQLite没有 TRUNCATE 命令,只能粗暴的执行

delete from table

桌面工具

安利一个不错的桌面操作SQLite的客户端软件,SQLite Expert,有针对个人的 Personal 版本。

最近的文章

Hexo引用显示本地图片

使用Hexo的同学都知道,Hexo的博客使用本地图片真的是非常麻烦,经常显示不出来,虽然本站最开始都固定死位置的,即本地位置和上传到服务器后位置不一样,文档里面地址适配具体位置,时间长了根目录下面的图片文件夹图片越来越多,也不好管理。鉴于博客本身生成后产生了一个目录,应该是可以使用的。 使用的问题先 …

技术 继续阅读
更早的文章

VC的/MT和/MD编译选择

经常使用 Visual Studio 编译程序,经常被一些莫名其妙的错误搞懵,特别是提示链接库时候MT(d)或者MD(d)不对应,下面针对二者的区别简单介绍(带d的是对应的Debug版本)。 主要区别首先看下二者的定义 /MD 表示多线程 DLL 版本,运行时库由 DLL 提供,即我们常说的动态 …

技术 继续阅读