如何重置字段的AUTO_INCREMENT?
我希望它再次从1开始计数。
如何重置字段的AUTO_INCREMENT?
我希望它再次从1开始计数。
当前回答
ALTER TABLE tablename AUTO_INCREMENT = 1
其他回答
要更新到最新的加号id,请执行以下操作:
ALTER TABLE table_name AUTO_INCREMENT =
(SELECT (id+1) id FROM table_name order by id desc limit 1);
编辑:
SET @latestId = SELECT MAX(id) FROM table_name;
SET @nextId = @latestId + 1;
ALTER TABLE table_name AUTO_INCREMENT = @nextId;
未测试,请在运行前测试*
从MySQL 5.6开始,您可以在InnoDB中使用简单的ALTERTABLE:
ALTER TABLE tablename AUTO_INCREMENT = 1;
更新文件以反映这一点:
13.1.7 ALTER TABLE语句
我的测试还显示该表未被复制。只需更改值即可。
从MySQL 5.6开始,由于在线DDL(注意算法=就地),以下方法的工作速度更快:
alter table tablename auto_increment=1,algorithm=就地;
您可以通过以下方式重置计数器:
ALTER TABLE tablename AUTO_INCREMENT = 1
对于InnoDB,不能将auto_increment值设置为低于或等于当前最高索引。(引自ViralPatel):
请注意,不能将计数器重置为小于或等于的值任何已经使用过的。对于MyISAM,如果值小于大于或等于AUTO_INCREMENT中当前的最大值列,该值将重置为当前最大值加1。对于InnoDB,如果该值小于列,不会发生错误,并且当前序列值不会更改。
请参阅如何使用另一个表中的MAX值重置MySQL AutoIncrement?关于如何动态地获得可接受的值。
您需要遵循Miles M评论中的建议,这里有一些PHP代码可以修复MySQL中的范围。此外,您还需要打开my.ini文件(MySQL),并将max_execution_time=60更改为max_exece_time=6000;对于大型数据库。
不要使用“ALTER TABLE tablename AUTO_INCREMENT=1”。它将删除数据库中的所有内容。
$con = mysqli_connect($dbhost, $dbuser, $dbpass, $database);
$res = mysqli_query($con, "select * FROM data WHERE id LIKE id ORDER BY id ASC");
$count = 0;
while ($row = mysqli_fetch_array($res)){
$count++;
mysqli_query($con, "UPDATE data SET id='".$count."' WHERE id='".$row['id']."'");
}
echo 'Done reseting id';
mysqli_close($con);