MYSQL 表重置自动增量为 1,同时保留现有记录的 id

MYSQL 表重置自动增量为 1,同时保留现有记录的 id

我有一个名为 Product 的分类网站 MySQL 表,product_id 是 bigint(20) AUTO_INCREMENT 字段。

当前 AUTO_INCREMENT 值为 224143。

客户希望它从 1 重新启动。但是该表已经有 7000 个现有的产品,从 prduct_id 210235 开始到 224143。用户可以使用它的 id 来管理他们的产品,我不能修改、重新生成 id,但想从 1 重新启动下一个 AUTOINCREMENT ENTRY,并保持现有记录不变。

提前致谢。

答案1

不能。MAX(column)+1即使您使用了 , MySQL 也会自动将 auto_increment 值设置为alter table tbl auto_increment = 1。这是一个非常合理的限制——重复的键永远不会有好结果。

答案2

首先,我认为这是个糟糕的想法,你这样做只会自找麻烦。

其次,我不确定是否有可能将计数器重新启动auto_increment回 1,因为 MySQL 会出于充分的理由阻止它。

答案3

我认为获得所需行为的最佳方法是将数据导出到文件(mysql -Bse“select * from table”默认将导出制表符分隔的数据)并将数据导入新表,使用 awk/perl 重写 ID 号或重新导入不带 ID 列的数据并让其在新表上从 1 开始自动递增。请注意,您必须修复其他表与此表的 ID 号之间的任何关系。

答案4

我明白你想做什么。你需要保留从 ID 210235 开始的记录,在此之前要插入从 ID 1 开始的新记录,插入后再次将 ID 重置为最大值,这可以通过以下更新语句实现:-

首先将最大值放入变量 maxvalue 中,然后:-

设置 FOREIGN_KEY_CHECKS=0;

更新表设置 id = (id - 最大值) 其中 report_id >= 最大值

设置 FOREIGN_KEY_CHECKS=1;

相关内容