SQLite3的RecNo,自增列与Top语法

最近在尝试使用SQLite3做项目,SQLite3是一个轻量级的集成式数据库,不需要数据库引擎,小巧,灵活,对于小项目来说非常合适,不用客户去安装繁重的SQL server或者access,数据的管理也可以使用SQLite Expert这种GUI工具方便的进行数据的增删改查建表操作,而这些最大的好处就是它们都是免费的(SQLite Expert Personal版是免费的,专业版要收费,不过对于一般用户已经足够了)。

先来看一下如何声明一个自增列:

CREATE TABLE [Test] (
  [Index] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
  [Name] CHAR(20), 
  [Comment] CHAR(50));

Index就是自增列。

今天在查询这个Index时遇到了问题,我使用

select Index from tablename

的时候一直提示语法错误,我就纳闷了,在

select * from tablename

里明明看到有这一列,为什么我单独select的时候会报语法错误呢?在网上搜索了一下,找不到是因为当你的表中有integer primary key,这个列被sqlite当成了rowid,如果要访问这个列,你可以使用如下几个特殊字段:

"rowid","oid"或"_rowid_"

如果你的表里没有设置integer primary key,那么会有一个默认的字段叫做RecNo表明当前的rowid,这个值是sqlite内部的,不能通过外部直接访问,但是你同样可以使用上面那三个字段来得到这个值。 像这样:

select rowid from tablename

再来说说top语法,SQLite不支持top语法,但是可以使用limit语法实现,limit的语法是

limit [offset,] upperbound

其中offset是可选参数,代表了从结果集第一条开始的偏移量,假如你需要第二条以后的结果(包括第二条),这里就是offset=2-1=1,如果是第三条往后(包括第三条)就是offset=3-1=2,upperbound代表了你一共要取几条数据,下面的例子展示了获取最新一条数据:

select * from tablename order by rowid desc limit 1

下面的例子展示了如何取得第3到11条数据,第三条的偏移量是3-1=2,一共要取11-3+1=9条数据,因此limit的参数是2,9:

select * from tablename order by oid limit 2,9

参考链接:http://www.sqlite.org/lang_createtable.html#rowid
http://www.sqlite.org/lang_select.html#orderby

打赏

博主开通了微信公众号,欢迎关注啦

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.