SQLITE数据表主键设置Id自增方法

Posted song2013

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLITE数据表主键设置Id自增方法相关的知识,希望对你有一定的参考价值。

 

SQLITE数据表主键设置Id自增方法

标签: sqliteintegerinsertnulltableapi
技术分享 分类:
 

    搞定了一个困扰许久的问题,原来sqlite中的主键也是可以设置为自增的:)方法就是声明为 INTEGER PRIMARY KEY 的字段可以自动增加。
    网上查到资料说,从 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)
    在逻辑意义上等价于:
insert into processlist VALUES((SELECT max(Id) FROM processlist)+1, ‘a‘,‘b‘,1);

insert into processlist
values
(null,‘aa‘,‘bb‘,1)
    执行两条插入语句后再查询表中数据:
select * from processlist
    结果如下:

Id Type Name IsUse
1  a       b       1 
2  aa     bb     1 

    一个新的API函数 sqlite3_last_insert_rowid() 返回最近的插入操作的整形键.注意这个整型键始终比之前插入表中的最后一个键大1。新键相对于表中的已有键来说是唯一的, 但它可能与之前从表中删除的键值重叠。要始终得到在整个表中唯一的键,在INTEGER PRIMARY KEY的声明之前加关键词AUTOINCREMENT.这样被选的键将总是比表中已存在的最大键大1。若可能的最大键已存在于表中,INSERT操作将失败并返回一个SQLITE_FULL错误码.

以上是关于SQLITE数据表主键设置Id自增方法的主要内容,如果未能解决你的问题,请参考以下文章

数据库如何设置主键(ID)自动增长啊(SQL语句)?

mysql数据库主键设置了自增,但是,我把删除了一些数据,随后加的数据为啥会自增ID会接着已经删除了的

Ef DbMigration 非主键字段 怎么设置为自增

Python操作MySQL获取插入数据的主键id

mysql 批量插入 获取所有自增ID

oracle数据库,表中有id(自增字段,主键), insert 语句插入一条记录后要求,返回当前插入记录的id値。