日期:2019年7月29日
作者:Commas
注释:这些天一直在写sqlite的脚本,今天就归纳一下sqlite自增字段(AUTOINCREMENT)的知识,希望可以帮助到大家。此笔记可能会有一些错误和疏漏,望指正,谢谢~~~
目录
一、sqlite自增字段小结
关键字 AUTOINCREMENT 的使用,必须满足以下两点:
1、只能用于整型(INTEGER)字段,INT类型是不可以;
2、只能用于PRIMARY KEY字段;
序号 | 字段定义 | 是否可以自增 | 备注 |
---|---|---|---|
1 | INT PRIMARY KEY | 否 | 字段值默认为NULL |
2 | INT PRIMARY KEY AUTOINCREMENT | NULL | AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY,AUTOINCREMENT(创建失败,仅仅允许设置在INTEGER PRIMARY KEY的列上) |
3 | INTEGER PRIMARY KEY | 是 | 自增(引擎没有创建sqlite_sequence表)。值 = 此表最大值 + 1,故可与之前删除的值重叠;当超过最大值时,会随机找一个没被使用的值 |
4 | INTEGER 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;
id | s1 |
---|---|
NULL | 1 |
NULL | 2 |
NULL | 3 |
--(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;
id | s1 |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
--(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;
id | s1 |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
--(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