欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQLite之Autoincrement关键字(自动递增)

程序员文章站 2023-11-18 20:25:16
sqlite 的 autoincrement 是一个关键字,用于表中的字段值自动递增。我们可以在创建表时在特定的列名称上使用 autoincrement 关键字实现该字段值...

sqlite 的 autoincrement 是一个关键字,用于表中的字段值自动递增。我们可以在创建表时在特定的列名称上使用 autoincrement 关键字实现该字段值的自动增加。

注意点:整型字段可以使用关键字autoincrement。

语法

autoincrement关键字的基本用法如下:

create table table_name(
  column1 integer autoincrement,
  column2 datatype,
  column3 datatype,
  .....
  columnn datatype,
);

例子:

考虑company表要创建如下:

sqlite> create table company(
  id integer primary key  autoincrement,
  name      text   not null,
  age      int    not null,
  address    char(50),
  salary     real
);

现在,以下记录插入到表 company:

insert into company (name,age,address,salary)
values ( 'paul', 32, 'california', 20000.00 );
insert into company (name,age,address,salary)
values ('allen', 25, 'texas', 15000.00 );
insert into company (name,age,address,salary)
values ('teddy', 23, 'norway', 20000.00 );
insert into company (name,age,address,salary)
values ( 'mark', 25, 'rich-mond ', 65000.00 );
insert into company (name,age,address,salary)
values ( 'david', 27, 'texas', 85000.00 );
insert into company (name,age,address,salary)
values ( 'kim', 22, 'south-hall', 45000.00 );
insert into company (name,age,address,salary)
values ( 'james', 24, 'houston', 10000.00 );

这将插入到表company 7个元组,company将有以下记录:

id          name        age         address     salary
----------  ----------  ----------  ----------  ----------
1           paul        32          california  20000.0
2           allen       25          texas       15000.0
3           teddy       23          norway      20000.0
4           mark        25          rich-mond   65000.0
5           david       27          texas       85000.0
6           kim         22          south-hall  45000.0
7           james       24          houston     10000.0

个人理解:

1.数据库插入字段:

autoincrement(自增加字段)不能重复使用删除的字段的id值,保证了id必须唯一;
rowid是找已存在的最大rowid+1,有可能rowid+1(当前的rowid)之前被删除过;

2.数据库rowid到达最大之后:

autoincrement(自增加字段)会返回sqlite_full错误码;
rowid新值会在这个最大数之前随机找一个没被使用字段的id值,可能是之前被删除过的字段;