sqlite创建自增字段浅谈(AUTOINCREMENT)

日期:2019年7月29日
作者:Commas
注释:这些天一直在写sqlite的脚本,今天就归纳一下sqlite自增字段(AUTOINCREMENT)的知识,希望可以帮助到大家。此笔记可能会有一些错误和疏漏,望指正,谢谢~~~


目录


一、sqlite自增字段小结

关键字 AUTOINCREMENT 的使用,必须满足以下两点:
1、只能用于整型(INTEGER)字段,INT类型是不可以;
2、只能用于PRIMARY KEY字段;

序号字段定义是否可以自增备注
1INT PRIMARY KEY字段值默认为NULL
2INT PRIMARY KEY AUTOINCREMENTNULLAUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY,AUTOINCREMENT(创建失败,仅仅允许设置在INTEGER PRIMARY KEY的列上)
3INTEGER PRIMARY KEY自增(引擎没有创建sqlite_sequence表)。值 = 此表最大值 + 1,故可与之前删除的值重叠;当超过最大值时,会随机找一个没被使用的值
4INTEGER PRIMARY KEY AUTOINCREMENT自增(引擎自动在sqlite_sequence表中添加一条记录),值 = sqlite_sequence表中对应值 + 1。故一般不会与之前删除的值重叠;当超过最大值时,会丢出一个SQLITE_FULL的错误

二、sqlite自增字段示例

--(1)INT PRIMARY KEY------>字段不会自增
--(1-1)创建表
create table [test_int](
	[id] INT PRIMARY KEY,
    [s1] TEXT(50) COLLATE NOCASE
);
--(1-2)插入值
insert into test_int(s1) values('1');
insert into test_int(s1) values('2');
insert into test_int(s1) values('3');
--(1-3)查询表
select * from test_int;
ids1
NULL1
NULL2
NULL3
--(2)INT PRIMARY KEY AUTOINCREMENT------>字段不会自增
--(2-1)创建表------>字段会自增
create table [test_int_autoincrement](
	[id] INT PRIMARY KEY AUTOINCREMENT,
    [s1] TEXT(50) COLLATE NOCASE
);
--(2-2)插入值
--(2-3)查询表
--说明: 
--无法创建表test_int_autoincrement,原因是
--AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY AUTOINCREMENT
--AUTOINCREMENT仅仅允许设置在INTEGER PRIMARY KEY的列上 
--(3)INTEGER PRIMARY KEY------>字段会自增
--(3-1)创建表
create table [test_integer](
	[id] INTEGER PRIMARY KEY,
    [s1] TEXT(50) COLLATE NOCASE
);
--(3-2)插入值
insert into test_integer(s1) values('1');
insert into test_integer(s1) values('2');
insert into test_integer(s1) values('3');
--(3-3)查询表
select * from test_integer;
ids1
11
22
33
--(4)INTEGER PRIMARY KEY AUTOINCREMENT------>字段会自增
--(4-1)创建表
create table [test_integer_autoincrement](
	[id] INTEGER PRIMARY KEY AUTOINCREMENT,
    [s1] TEXT(50) COLLATE NOCASE
);
--(4-2)插入值
insert into test_integer_autoincrement(s1) values('1');
insert into test_integer_autoincrement(s1) values('2');
insert into test_integer_autoincrement(s1) values('3');
--(4-3)查询表
select * from test_integer_autoincrement;
ids1
11
22
33
--(5) sqlite_sequence 表,
--这个表包含两个列:name和seq。name记录自增列所在的表,
--seq记录当前序号(下一条记录的编号就是当前序号加1)。
select * from  sqlite_sequence ;

点(5)参考作者“与时俱进”的《SQLite3中自增主键归零方法》
当SQLite数据库中包含自增列时,会自动建立一个名为 sqlite_sequence 的表。
这个表包含两个列:name和seq。name记录自增列所在的表,seq记录当前序号(下一条记录的编号就是当前序号加1)。
如果想把某个自增列的序号归零,只需要修改 sqlite_sequence表就可以了。
UPDATE sqlite_sequence SET seq = 0 WHERE name=‘TableName’;
也可以直接把该记录删掉:
DELETE FROM sqlite_sequence WHERE name=‘TableName’;
要想将所有表的自增列都归零,直接清空sqlite_sequence表就可以了:
DELETE FROM sqlite_sequence;


版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/97634257

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Commas.KM

码路共同进步,感恩一路有您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值