我正在使用SQLite3。我使用整数作为主ID加载一个表示30行的表,它会自动递增。
现在我删除表中的所有行,然后将一些新信息重新加载到表中。
问题是:行计数(我的PrimaryID)现在从31开始。有没有办法可以从1号开始加载新行?
答案 0 :(得分:32)
使用:
DELETE FROM your_table;
DELETE FROM sqlite_sequence WHERE name = 'your_table';
SQLite使用特殊的SQLITE_SEQUENCE表跟踪表所拥有的最大ROWID。每当创建包含AUTOINCREMENT列的普通表时,都会自动创建并初始化SQLITE_SEQUENCE表。可以使用普通的UPDATE,INSERT和DELETE语句修改SQLITE_SEQUENCE表的内容。但是对此表进行修改可能会扰乱AUTOINCREMENT密钥生成算法。在进行此类更改之前,请确保您知道自己在做什么。
在SO上找到答案:SQLite Reset Primary Key Field
使用:
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';
答案 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;