【问题标题】:MySQL Auto increment: Is there any way to reassign IDs starting from 1?MySQL自动增量:有没有办法从1开始重新分配ID?
【发布时间】:2014-03-31 07:53:39
【问题描述】:

我有一个带有自动增量 ID 的表,它运行了大量的 INSERT 和 DELETE,导致数字出现很大差距。为了简洁起见,我只是想知道,是否有一个查询将从最低 ID 开始,将其分配为 1 并从那里开始 +1? ID 与数据库中的任何其他列都没有关系。

所以它会从,例如:

1034 2572 9012

到:

1 2 3

我不想重置自动增量,我知道该怎么做。我实际上是要更改 ID。或者这被认为是不好的做法?

谢谢。

【问题讨论】:

  • 大多数情况下不会,因为它没用!您可以添加带有增量的列并将其用作主键。问题是,如果你使用这个增量并删除表中的一个条目,你就会得到 +2 等等,所以你不能真正使用增量。你想用它做什么?

标签: mysql auto-increment


【解决方案1】:

我认为这是不好的做法。但是......您可以将您的数据选择到第二个表中,激活另一个自动增量键,但没有您的 ID,然后截断您当前的表并将您的数据与新 ID 一起重新插入......当然,有丢失的危险数据等,我真的不会这样做。

附:您还需要重置序列号的当前值。

【讨论】:

    【解决方案2】:

    虽然这不是一个好习惯,但您可以使用这样的查询:

    假设我们有一个包含两个字段idvalue 的表,其中id 是INT 类型。

    insert into table (id, value)
    select max(id)+1, 'value' from table
    

    请注意,如果同时运行多个查询,则可能会出现大量插入/更新问题。

    【讨论】:

      【解决方案3】:
      SET @id = 0;
      UPDATE tbl_config SET id = @id := @id + 1 ORDER BY id;
      SET @alt = CONCAT('ALTER TABLE tbl_config AUTO_INCREMENT = ', @id + 1);
      PREPARE aifix FROM @alt;
      EXECUTE aifix;
      DEALLOCATE PREPARE aifix;
      

      请注意:如果您使用 id 作为外部键的引用,您将遇到破坏数据一致性的大问题!

      【讨论】:

        猜你喜欢
        • 2013-10-04
        • 1970-01-01
        • 2017-11-03
        • 2010-11-25
        • 2011-12-29
        • 2012-05-31
        • 1970-01-01
        • 2011-06-09
        • 1970-01-01
        相关资源
        最近更新 更多