如何更改 MySQL 中的自动增量计数器?

Posted

技术标签:

【中文标题】如何更改 MySQL 中的自动增量计数器?【英文标题】:How do I change the Auto Increment counter in MySQL? 【发布时间】:2011-12-30 23:58:47 【问题描述】:

我有一个 ID 字段,它是我的主键,只是一个 int 字段。

我的行数少于 300 行,但现在每次有人注册时都会输入非常高的 ID auto inc,例如 11800089、11800090 等......一种让它恢复的方法,以便它可以按照顺序 (310,311,312)

谢谢!

【问题讨论】:

也许您应该告诉我们您正在使用什么数据库以及您使用什么工具来访问它? 对不起,丹,这是一个 mysql 数据库。我只是通过使用 php 插入的注册表单输入新用户。 【参考方案1】:

我相信 mysql 会在 id 上执行一个 select max 并放置下一个。尝试将表的 ID 更新为所需的序列。您将遇到的问题是,如果它们已链接,您应该在 fk 上的更新上放置 Cascade。 我想到的一个问题是:

UPDATE Table SET id=(SELECT max(id)+1 FROM TAble WHERE id<700)

700 比你拥有的 11800090 少并且接近 300 WHERE id>0;

如果你不放哪里,我相信mysql会抱怨

【讨论】:

仅供参考,MySQL 执行SELECT MAX()。下一个自增 ID 与表定义一起存储。 在 Inno db 中它像 dev.mysql.com/doc/refman/5.1/en/… 那样初始化。 MyISam 与众不同,我不知道。谢谢【参考方案2】:

猜测您使用的是 mysql,因为您使用的是 PHP。您可以使用如下语句重置 auto_increment

 alter table mytable autoincrement=301;

不过要小心 - 因为当 auto inc 值重叠时会出现问题

【讨论】:

【参考方案3】:
ALTER TABLE table_name AUTO_INCREMENT=310;

但请注意,您不想重复 ID。如果数字那么高,他们以某种方式得到了这样的结果。请确保您没有与较低 ID 号相关联的数据。

https://dev.mysql.com/doc/refman/8.0/en/example-auto-increment.html

【讨论】:

MySQL 似乎太过分了保护您免受 ID 冲突。它实际上将此内部值设置为数据库中所有 ID 的最大值 + 1您在此处提供的值。因此,例如,您不能希望拥有一个特殊的 ID 999999999,而是从 100 开始自动递增。 注意如果你使用db engine inodb你必须重启mysql服务器。否则新的自动增量值将被忽略。那是因为增量值是缓存的,在运行时不能手动更改! 另外值得注意的是,设置的值就是你接下来要分配的ID;即,如果您的最后一行是 ID #5,请将其设置为 6。 确实,正如 BobStein 所说,设置 AUTO_INCREMENT=1 只会在表为空时设置该值。这意味着您不必担心写入什么值,只需将其设置为 1 甚至 0,它将根据已经存在的行变为可能的最小值。每当我删除一行时,我都会这样做。 @JonP 你在重复使用 ID,即使在删除之后?太棒了。【参考方案4】:

可能有更快的方法,但我会这样做以确保我正在重新创建 ID;

如果您使用的是 MySQL 或其他 SQL 服务器,则需要:

    备份您的数据库 删除 id 列 导出数据 TRUNCATE 或“清空”表格 将id 列重新创建为auto_increment 重新导入数据

这将破坏现有行的 ID,因此如果这些很重要,则不是可行的选择。

【讨论】:

【参考方案5】:

我在玩类似的问题并找到了这个解决方案:

SET @newID=0;
UPDATE `test` SET ID=(@newID:=@newID+1) ORDER BY ID;
SET @c = (SELECT COUNT(ID) FROM `test`);
SET @s = CONCAT("ALTER TABLE `test` AUTO_INCREMENT = ",@c);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;  

希望对遇到类似情况的人有所帮助!

【讨论】:

【参考方案6】:

表格的自动递增计数器可以(重新)设置两种方式:

    通过执行查询,就像其他人已经解释的那样:

    ALTER TABLE &lt;table_name&gt; AUTO_INCREMENT=&lt;table_id&gt;;

    使用 Workbench 或其他可视化数据库设计工具。我将在 Workbench 中展示它是如何完成的——但在其他工具中也不应该有太大的不同。通过右键单击所需的表并从上下文菜单中选择 Alter table。在底部,您可以看到更改表格的所有可用选项。选择Options,您将获得此表格:

    然后只需在字段Auto increment 中设置所需的值,如图所示。 这将基本上执行第一个选项中显示的查询。

【讨论】:

以上是关于如何更改 MySQL 中的自动增量计数器?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL SELECT 增量计数器

AUTOINCREMENT 自动增量

如何使用自动增量更新字段 CONCAT?

Mysql IN子句与自动增量ID的范围

用bash中的增量计数器替换两个字符串中包含的字符串

MySQL 自动递增和选择计数