Mad*_*ddy 17 mysql sql sqlite auto-increment
我正在使用SQLite3.我使用整数作为主ID加载一个表示30行的表,并自动递增.
现在我删除表中的所有行,然后将一些新信息重新加载到表中.
问题是:行计数(我的PrimaryID)现在以31开头.有没有办法可以从1号开始加载新行?
OMG*_*ies 32
使用:
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重置主键字段
使用:
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文档中提供了更多信息.