1.sqlite的自增主键:
用数据库缓存一些数据,想实现队列的那种,先入先出,需要对插入sqlite的数据进行个排序,实验了rowid,好像sqlite不能按照rowid删除,故考虑增加一个自增主键的字段,来区分插入的先后!
sqlite从2.3.4版本开始支持自增主键,
如果将一个表中的一个字段声明为 INTEGER PRIMARY KEY,那么只需向该表的该字段插入一个 NULL 值,这个 NULL 值将自动被更换为比表中该字段所有行的最大值大 1 的整数;如果表为空,那么将被更换为 1。
CREATE TABLE "ProcessList"(
[Id] integer(4) PRIMARY KEY
,[Type] varchar(20)
,[Name] varchar(30)
,[IsUse] int
)
执行
insert into processlist
values
(null,'a','b',1)
要始终得到在整个表中唯一的键,在INTEGER PRIMARY KEY的声明之前加关键词AUTOINCREMENT.这样被选的键将总是比表中已存在的最大键大1。若可能的最大键已存在于表中,INSERT操作将失败并返回一个SQLITE_FULL错误码。
故建议sql为:
CREATE TABLE "ProcessList"(
[Id] integer(4) AUTOINCREMENT PRIMARY KEY
[Id] integer(4) AUTOINCREMENT PRIMARY KEY
,[Type] varchar(20)
,[Name] varchar(30)
,[IsUse] int
)
,[Name] varchar(30)
,[IsUse] int
)
2.自增主键归零
自增主键是通过表sqlite_sequence来实现的。使用自增长字段,引擎会自动产生一个sqlite_sequence表,在sqlite_sequence中有两个字段name、seq。name记录了表名,seq记录了该表的最大id,每插入一条记录,相应的seq加1,删除记录时,此记录不会变化。
故若想自增主键归零需手动修改sqlite_sequence中相应的记录。