重置SQLite3/MySQL中的行号计数

Mad*_*ddy 17 mysql sql sqlite auto-increment

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

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

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

OMG*_*ies 32

SQLite的

使用:

DELETE FROM your_table;    
DELETE FROM sqlite_sequence WHERE name = 'your_table';
Run Code Online (Sandbox Code Playgroud)

文档

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

在SO上找到答案:SQLite重置主键字段

MySQL的

使用:

ALTER TABLE tbl AUTO_INCREMENT = 1;
Run Code Online (Sandbox Code Playgroud)

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


qua*_*oup 11

对于MySQL:

使用TRUNCATE TABLE tablename空表(删除所有记录)并重置自动递增计数.

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

对于SQLite:

DELETE FROM tablename;
DELETE FROM SQLITE_SEQUENCE WHERE name='tablename';
Run Code Online (Sandbox Code Playgroud)

参考

SQLite AutoIncrement
MySQL AutoIncrement


小智 7

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

UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='table_name';
Run Code Online (Sandbox Code Playgroud)

对于MySql使用

ALTER TABLE table_name AUTO_INCREMENT = 1;
Run Code Online (Sandbox Code Playgroud)


小智 6

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

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