【问题标题】:when you delete a record from a database mysql当您从数据库 mysql 中删除记录时
【发布时间】:2023-04-01 23:15:01
【问题描述】:

我是整个数据库场景的新手,只是在学习。我有一个数据库 mysql,我正在使用 phpmyadmin 来编辑字段等。我创建了一个 auto_incremenet 'id' 字段,该字段设置为主要字段。如果我添加 5 个字段,则 ID 将为“1,2,3,4,5”。如果我删除所有这些字段并添加另外 5 个字段,为什么 ID 会变为“6,7,8,9,10”? (而不是回到 0,因为从技术上讲,其他字段不再存在,所以它是独一无二的,对吧?)。有没有办法让 id 成为顺序数字? 1,2,3,4,5 ?

【问题讨论】:

  • 主键只能使用一次...因此即使删除记录,PK 也不会重新分配给新记录。
  • 如果您确实需要跟踪“InUseID”之​​类的内容,您将需要一个单独的字段,并明确它与主键“ID”不同

标签: mysql database phpmyadmin


【解决方案1】:

您无需担心。您的主键应该是一个无符号整数,它可以容纳足够大的数字。

【讨论】:

    【解决方案2】:

    我相信这是因为在使用关系数据库系统时,您可以将行“链接”到其他行,通常是通过它们的 id。如果您开始重复使用 ID,那么您最终可能会陷入混乱。

    您可以使用以下查询将 auto_increment 计数器重置为您希望的任何值:

    ALTER TABLE tableName AUTO_INCREMENT=123
    

    如果您要删除表中的所有行,则可以使用 TRUNCATE 来重置计数器。

    TRUNCATE TABLE tableName
    

    【讨论】:

      【解决方案3】:

      我认为这种行为的主要原因是效率,这意味着 MySQL 不需要跟踪哪些数字没有被使用,它只需要知道哪个数字最后被使用。

      【讨论】:

        【解决方案4】:

        看看this 的问题。但基本上:

        ALTER TABLE mytable AUTO_INCREMENT = 1;
        

        更新

        如前所述,摆弄自动生成的 PK 会无限期地让您头疼。或者写一堆样板代码来做家务。

        【讨论】:

        • 但是请注意,在生产环境中摆弄自动生成的 PK 值会导致非常令人沮丧的结果。
        【解决方案5】:

        您必须重置自动增量,以便重新编号 auto_incremented 值,在此处阅读更多有关解决方案的信息 http://www.dbuggr.com/milly/reset-auto-increment-mysql/。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-15
          • 1970-01-01
          • 2022-01-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-14
          相关资源
          最近更新 更多