重置SQLite3 / MySQL中的行号计数

时间:2010-08-09 19:50:06

标签: mysql sql sqlite auto-increment

我正在使用SQLite3。我使用整数作为主ID加载一个表示30行的表,它会自动递增。

现在我删除表中的所有行,然后将一些新信息重新加载到表中。

问题是:行计数(我的PrimaryID)现在从31开始。有没有办法可以从1号开始加载新行?

5 个答案:

答案 0 :(得分:32)

SQLite的

使用:

DELETE FROM your_table;    
DELETE FROM sqlite_sequence WHERE name = 'your_table';

Documentation

  

SQLite使用特殊的SQLITE_SEQUENCE表跟踪表所拥有的最大ROWID。每当创建包含AUTOINCREMENT列的普通表时,都会自动创建并初始化SQLITE_SEQUENCE表。可以使用普通的UPDATE,INSERT和DELETE语句修改SQLITE_SEQUENCE表的内容。但是对此表进行修改可能会扰乱AUTOINCREMENT密钥生成算法。在进行此类更改之前,请确保您知道自己在做什么。

在SO上找到答案:SQLite Reset Primary Key Field

的MySQL

使用:

ALTER TABLE tbl AUTO_INCREMENT = 1;

在任何一种情况下,数据库都不关心id号是否是顺序的 - 只是值是唯一的。如果用户永远不会看到主键值(他们不应该,因为数据可以更改并且不会总是在主键值上),我不会理会这些选项。

答案 1 :(得分:11)

对于MySQL:

使用TRUNCATE TABLE tablename清空表格(删除所有记录)并重置自动增量计数。

如果您只想重置计数,也可以使用ALTER TABLE tablename AUTO_INCREMENT = 0;

对于SQLite:

DELETE FROM tablename;
DELETE FROM SQLITE_SEQUENCE WHERE name='tablename';

参考

SQLite AutoIncrement
MySQL AutoIncrement

答案 2 :(得分:7)

对于SQLite使用(不需要删除并创建表)

UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='table_name';

对于MySql使用

ALTER TABLE table_name AUTO_INCREMENT = 1;

答案 3 :(得分:6)

在这种情况下,您不应该使用AUTOINCREMENT。只需将主键定义为INTEGER PRIMARY KEY,在DELETE FROM查询后,计数将重置为1。如果没有AUTOINCREMENT,默认行为仍然是主键的自动增量,只要你的表中空间不足(在这种情况下,旧的 - 删除 - 值将被重用)。

SQLite Autoincrement文档中提供了更多信息。

答案 4 :(得分:0)

ALTER TABLE tbl AUTO_INCREMENT = 0;