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

日期: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

发布了26 篇原创文章 · 获赞 18 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_35844043/article/details/97634257