Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重置SQLite3/MySQL中的行号计数_Mysql_Sql_Sqlite_Auto Increment - Fatal编程技术网

重置SQLite3/MySQL中的行号计数

重置SQLite3/MySQL中的行号计数,mysql,sql,sqlite,auto-increment,Mysql,Sql,Sqlite,Auto Increment,我正在使用SQLite3。我使用integer作为主ID加载一个包含30行的表,它会自动递增 现在我删除表中的所有行,然后将一些新信息重新加载到表中 问题是:行计数(我的PrimaryID)现在从31开始。有没有办法从1号开始加载新行 对于MySQL: DELETE FROM tablename; DELETE FROM SQLITE_SEQUENCE WHERE name='tablename'; 使用截断表tablename清空表(删除所有记录)并重置自动递增计数 您还可以使用altert

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

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


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

对于MySQL:

DELETE FROM tablename;
DELETE FROM SQLITE_SEQUENCE WHERE name='tablename';
使用
截断表tablename
清空表(删除所有记录)并重置自动递增计数

您还可以使用
altertable tablename AUTO_INCREMENT=0如果您只想重置计数

对于SQLite:

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

工具书类

SQLite 使用:

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

我发现答案是这样的:

MySQL 使用:


在任何一种情况下,数据库都不关心id号是否是顺序的——只关心值是否是唯一的。如果用户从未看到主键值(他们不应该看到,因为数据可能会更改&不会始终处于该主键值),我就不需要考虑这些选项。

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

文档中提供了更多信息。

用于SQLite(无需删除和创建表)

供MySql使用

ALTER TABLE table_name AUTO_INCREMENT = 1;

如果执行
AUTO_INCREMENT=0
插入的第一条记录是否以
id
为0或1开始?@JohnB:Thx,该值需要为1才能在我的5.1.35上重置-我更新了我的答案。将其设置为零不会返回错误-序列不变。@quantomSoup:请参阅对Johnb的评论在MySQL上将自动增量设置为零不会将值重置为一;它采用了基于现有值的次高值。这是迄今为止最准确的答案。根据sqlite,“AUTOINCREMENT关键字会增加额外的CPU、内存、磁盘空间和磁盘I/O开销,如果不严格需要,应该避免使用。通常不需要。”
ALTER TABLE tbl AUTO_INCREMENT = 1;
UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='table_name';
ALTER TABLE table_name AUTO_INCREMENT = 1;