SQLite清空表并将自增列归零

SQLite清空表并将自增列归零

一、SQLite清空表并将自增列归零

在SQLite中直接使用 DELETE FROM TableName 就可以了。

通常在清空表的时候,还需要把自增列归零。

在SQLite中定义自增列的方法如下:代码如下:

CREATE TABLE TableName ( id INTEGER PRIMARY KEY AUTOINCREMENT, name varchar, type Integer );

1 当SQLite数据库中包含自增列时,会自动建立一个名为sqlite_sequence 的表。

这个表包含两个列:name和seq。name记录自增列所在的表,seq记录当前序号(下一条记录的编号就是当前序号加1)。

2. 如果想把某个自增列的序号归零

只需要修改 sqlite_sequence表就可以了。

代码如下:

UPDATE sqlite_sequence SET seq = 0 WHERE name='TableName';

也可以直接把该记录删掉:

代码如下:

DELETE FROM sqlite_sequence WHERE name='TableName';

3. 要想将所有表的自增列都归零,直接清空sqlite_sequence表就可以了:

代码如下:

DELETE FROM sqlite_sequence;

二、Sqlite中INTEGER PRIMARY KEY AUTOINCREMENT分析

     当你在某个sqlite数据库文件中,使用自增长字段,引擎会自动产生一个sqlite_sequence表,用于记录每个表的自增长字段的已使用的最大值,用户可以看到,

并可以用使用Update、Delete和Insert操作,但不建议这么使用,这会让引擎混乱。

也就是说,只要你在建表语句中加入INTEGER PRIMARY KEY AUTOINCREMENT字段类型(注意integer类型,主键primary key,自增标记autoincrement,共计3个属性都必不可少。实际上sqlite貌似对AUTOINCREMENT自增字段有限制,必须是主键才能够添加该AUTOINCREMENT自增属性,否则在建立表时会失败报错,当然类型为integer数值也是AUTOINCREMENT自增属性必不可少的条件),那么当你在该表中insert数据的时候,sqlite_sequence表中才会自动将当前表的自增字段的最大值记录记录到sqlite_sequence表中。

注意1:即sqlite_sequence中保存的值,是某个自增字段的当前表的最大值。经亚强测试,该表中的最大值必须是:【使用insert 插入值】,或者【insert插入值,没有显示插入自增字段,而是自增字段默认自增的值】,这2种情况下触发sqlite_sequence表自动检测改动表中的自增字段的当前最大值,然后更新到当前sqlite_sequence表中。比如我们用update命令更新自增字段为所在表a中的自增字段为当前自增字段值中最大的值345。那么我们再来查询sqlite_sequence表,此时该sqlite_sequence表中的最大值并没有更新为a表中自增字段的最大值345(即我们刚刚update的那个值),从而可以看出sqlite_sequence表中存储的值,不一定是对应表中自增字段的最大值。

注意2:我们可以update表sqlite_sequence中,各个表对应的seq值。我们对某个表新插入行数据的时候,自增字段的值根据2个值确定,,哪个大取那个值+1作为新插入行的自增字段的值。这2个参数是,1:表中自增字段中最大的值。2:sqlite_sequence中存储的当前操作的表对应的seq字段的值。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容