【问题标题】:Can I fix id number if it goes out of order? [duplicate]如果出现故障,我可以修复身份证号码吗? [复制]
【发布时间】:2012-02-25 07:28:21
【问题描述】:

可能重复:
Fragmentation of id's (auto_increment column) in mysql

我有一个新闻门户,每条新闻都有自己的 id,现在 MySql 中有 515 篇文章

但是几天前我做了一些混乱,所以在添加新闻时显示的 id 2339,我总是必须手动编辑到 516。

有什么办法可以修复它,所以下一篇文章将使用 id 517 而不是 2340?

【问题讨论】:

  • 您可以使用 ALTER TABLE 语句重置 auto_increment 值,但您真的需要吗?
  • 将PK用作物料序列计数器是错误的。 PK 用于其他目的

标签: php mysql


【解决方案1】:

primary key 应仅用于映射关系和唯一标识行。除非您将 ID 字段也设置为 foreign key,否则重新排序可能会破坏您的大部分数据库功能。

简而言之,你所问的都是可能的,但在数据库设计中绝不是一个好主意。不要让虚荣心妨碍构建一个好的数据库。

现在,如果出于某种疯狂的原因您仍想这样做,最好的办法是使用 PHP 脚本选择 * 并从表中按 ID 排序。然后让它循环并将每一行的 ID 列更新为您想要的任何内容(例如,从 0 开始并递增)。您最有可能遇到的问题是 primary key 是唯一的,并且您的 ID 不是完美的递增顺序,因此您可能必须先将 ID 设为常规列,然后将其切换回 primary keyunique key操作后。

【讨论】:

    【解决方案2】:

    我认为您只是想更改自动递增 id 的当前索引?

    如果您有 PhpMyAdmin,您可以点击您的表格,然后转到“操作”选项卡。您将看到一个名为“AUTO_INCREMENT”的字段。您需要将其更改为 517 而不是 2340。

    或者,使用 SQL:

    ALTER TABLE articles SET AUTO_INCREMENT = 517
    

    编辑:我看到很多 cmets 说这根本不重要。这是真的,它不会影响任何事情,而且可能永远不应该这样做。但是,如果您仍然决定继续进行,我至少提供了一个解决方案。

    【讨论】:

    • 非常感谢。这成功了 - 现在它回到了原来的计数 - 谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 2020-11-18
    • 1970-01-01
    • 2019-08-29
    • 2020-11-26
    • 1970-01-01
    相关资源
    最近更新 更多