SQLite数据库的id字段,怎么设置成从1开始自增?

时间:2022-06-01 20:45:25
用的是SQLite Expert professional 个人版,现在已经实现了自增,但是对第一个值赋值的时候,怎么能设置成从1开始呢?

6 个解决方案

#1


sqlite3默认就是1的吧。
新建了含PRIMARY KEY AUTOINCREMENT 主键自增表(如 test1)后,会自动产生一个sqlite_sequence表,其中保存了相关主键的最大值,当然新建表时是没有记录的。
然后向test1插入数据时,会更新sqlite_sequence表,可以看到默认主键是从1开始的。

如新建表

Create  test1(
[id] integer PRIMARY KEY AUTOINCREMENT
,[name]   
);

自动生成表sqlite_sequence

查询sqlite_sequence 

select * from sqlite_sequence;

此时无记录

name        seq



向test1表插入行

insert into test1 values(null,'nihao1');--注意,第一次插入一定要插入主键值,可以为null,之后的插入操作可以不插入主键值,           也可以插入null

然后看到了test1表中有了记录

id       name
1        nihao1

可以看出来默认自增id是从1开始

此时检索表 from sqlite_sequence,可以看到有了记录

name        seq
test1           1

sqlite_sequence是可以修改的,支持Update、Delete和Insert操作,但不建议这么使用,这会让引擎混乱。

#2


引用 1 楼 dianjixue1 的回复:
sqlite3默认就是1的吧。
新建了含PRIMARY KEY AUTOINCREMENT 主键自增表(如 test1)后,会自动产生一个sqlite_sequence表,其中保存了相关主键的最大值,当然新建表时是没有记录的。
然后向test1插入数据时,会更新sqlite_sequence表,可以看到默认主键是从1开始的。

如新建表

Create  test1(
[id] integer PRIMARY KEY AUTOINCREMENT
,[name]   
);

自动生成表sqlite_sequence

查询sqlite_sequence 

select * from sqlite_sequence;

此时无记录

name        seq



向test1表插入行

insert into test1 values(null,'nihao1');--注意,第一次插入一定要插入主键值,可以为null,之后的插入操作可以不插入主键值,           也可以插入null

然后看到了test1表中有了记录

id       name
1        nihao1

可以看出来默认自增id是从1开始

此时检索表 from sqlite_sequence,可以看到有了记录

name        seq
test1           1

sqlite_sequence是可以修改的,支持Update、Delete和Insert操作,但不建议这么使用,这会让引擎混乱。


多谢多谢,目前来看是可以了,之前不知道是什么问题不能从1开始

还有个问题,删除id后,再添加id会从删除的id开始继续添加,就不连续了,这个问题怎么解决

#3


引用 1 楼 dianjixue1 的回复:
sqlite3默认就是1的吧。
新建了含PRIMARY KEY AUTOINCREMENT 主键自增表(如 test1)后,会自动产生一个sqlite_sequence表,其中保存了相关主键的最大值,当然新建表时是没有记录的。
然后向test1插入数据时,会更新sqlite_sequence表,可以看到默认主键是从1开始的。

如新建表

Create  test1(
[id] integer PRIMARY KEY AUTOINCREMENT
,[name]   
);

自动生成表sqlite_sequence

查询sqlite_sequence 

select * from sqlite_sequence;

此时无记录

name        seq



向test1表插入行

insert into test1 values(null,'nihao1');--注意,第一次插入一定要插入主键值,可以为null,之后的插入操作可以不插入主键值,           也可以插入null

然后看到了test1表中有了记录

id       name
1        nihao1

可以看出来默认自增id是从1开始

此时检索表 from sqlite_sequence,可以看到有了记录

name        seq
test1           1

sqlite_sequence是可以修改的,支持Update、Delete和Insert操作,但不建议这么使用,这会让引擎混乱。


我去,这就是我要的答案!!!
我之前实现的是把所有id都取出来,然后判断最大的,最后得到想要的那个id值,如果此时数据库被清空了,那么就自动复制为1,非常麻烦,而且总感觉可能有问题!
多谢多谢!!!

#4


lz,用工具建表的时候怎么设置自动递增啊????

#5


请问:将表test1中的数据完全删除之后,在插入数据时,id竟然不是从1开始?还有删除其中一条数据之后,他的id也是不连续的,怎么解决?

#6


insert or replace into table_1(id,name) 
select (select count(*)+1 from accts where id < a.id),name from table_1 a
where id = a.id

#1


sqlite3默认就是1的吧。
新建了含PRIMARY KEY AUTOINCREMENT 主键自增表(如 test1)后,会自动产生一个sqlite_sequence表,其中保存了相关主键的最大值,当然新建表时是没有记录的。
然后向test1插入数据时,会更新sqlite_sequence表,可以看到默认主键是从1开始的。

如新建表

Create  test1(
[id] integer PRIMARY KEY AUTOINCREMENT
,[name]   
);

自动生成表sqlite_sequence

查询sqlite_sequence 

select * from sqlite_sequence;

此时无记录

name        seq



向test1表插入行

insert into test1 values(null,'nihao1');--注意,第一次插入一定要插入主键值,可以为null,之后的插入操作可以不插入主键值,           也可以插入null

然后看到了test1表中有了记录

id       name
1        nihao1

可以看出来默认自增id是从1开始

此时检索表 from sqlite_sequence,可以看到有了记录

name        seq
test1           1

sqlite_sequence是可以修改的,支持Update、Delete和Insert操作,但不建议这么使用,这会让引擎混乱。

#2


引用 1 楼 dianjixue1 的回复:
sqlite3默认就是1的吧。
新建了含PRIMARY KEY AUTOINCREMENT 主键自增表(如 test1)后,会自动产生一个sqlite_sequence表,其中保存了相关主键的最大值,当然新建表时是没有记录的。
然后向test1插入数据时,会更新sqlite_sequence表,可以看到默认主键是从1开始的。

如新建表

Create  test1(
[id] integer PRIMARY KEY AUTOINCREMENT
,[name]   
);

自动生成表sqlite_sequence

查询sqlite_sequence 

select * from sqlite_sequence;

此时无记录

name        seq



向test1表插入行

insert into test1 values(null,'nihao1');--注意,第一次插入一定要插入主键值,可以为null,之后的插入操作可以不插入主键值,           也可以插入null

然后看到了test1表中有了记录

id       name
1        nihao1

可以看出来默认自增id是从1开始

此时检索表 from sqlite_sequence,可以看到有了记录

name        seq
test1           1

sqlite_sequence是可以修改的,支持Update、Delete和Insert操作,但不建议这么使用,这会让引擎混乱。


多谢多谢,目前来看是可以了,之前不知道是什么问题不能从1开始

还有个问题,删除id后,再添加id会从删除的id开始继续添加,就不连续了,这个问题怎么解决

#3


引用 1 楼 dianjixue1 的回复:
sqlite3默认就是1的吧。
新建了含PRIMARY KEY AUTOINCREMENT 主键自增表(如 test1)后,会自动产生一个sqlite_sequence表,其中保存了相关主键的最大值,当然新建表时是没有记录的。
然后向test1插入数据时,会更新sqlite_sequence表,可以看到默认主键是从1开始的。

如新建表

Create  test1(
[id] integer PRIMARY KEY AUTOINCREMENT
,[name]   
);

自动生成表sqlite_sequence

查询sqlite_sequence 

select * from sqlite_sequence;

此时无记录

name        seq



向test1表插入行

insert into test1 values(null,'nihao1');--注意,第一次插入一定要插入主键值,可以为null,之后的插入操作可以不插入主键值,           也可以插入null

然后看到了test1表中有了记录

id       name
1        nihao1

可以看出来默认自增id是从1开始

此时检索表 from sqlite_sequence,可以看到有了记录

name        seq
test1           1

sqlite_sequence是可以修改的,支持Update、Delete和Insert操作,但不建议这么使用,这会让引擎混乱。


我去,这就是我要的答案!!!
我之前实现的是把所有id都取出来,然后判断最大的,最后得到想要的那个id值,如果此时数据库被清空了,那么就自动复制为1,非常麻烦,而且总感觉可能有问题!
多谢多谢!!!

#4


lz,用工具建表的时候怎么设置自动递增啊????

#5


请问:将表test1中的数据完全删除之后,在插入数据时,id竟然不是从1开始?还有删除其中一条数据之后,他的id也是不连续的,怎么解决?

#6


insert or replace into table_1(id,name) 
select (select count(*)+1 from accts where id < a.id),name from table_1 a
where id = a.id