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字段的值。