【问题标题】:How can I restart my autoincrement in phpmyadmin?如何在 phpmyadmin 中重新启动自动增量?
【发布时间】:2015-06-08 14:23:18
【问题描述】:

我的 phpmyadmin 中有一些表,其中一列是自动递增的。

问题是,当我从表中删除一些行(例如元素 Car,索引自动递增 1)并在表中创建另一行时,新行的索引为 2,但在表中只有一行。

我希望创建的第二个元素的索引等于行的位置,例如,如果我有 3 行,则第三个元素的索引等于 3。

我一直在寻找一种方法,让我可以像这样使用我的 phpMyAdmin,但我找不到任何东西。

有可能吗?如果是真的,我该怎么办?我必须重新创建表吗?

【问题讨论】:

  • 这应该不是问题.....自动增量不是关于创建连续的 id 值,而是关于创建唯一的 id 值;你永远不应该编写依赖于连续值的代码

标签: php mysql phpmyadmin


【解决方案1】:

这是可能的,但您不应该在生产环境中这样做。

SQL 查询是:

ALTER TABLE tablename AUTO_INCREMENT = 1

其中最重要的部分是防止覆盖。例如,您有一个用户,并且该用户的 id 为 81,如果您删除此用户并且数据库不记得此 id 81 曾经被用户使用过(例如,您有一些关系- 像朋友列表)将具有相同 ID 的用户可能具有相同的数据。

所以基本上,您不想重置自动增量值。

【讨论】:

  • “具有相同 ID 的用户可能具有相同的数据” 不,如果您的外键约束正确级联,则不会。
  • 是的,没错。我说得不够清楚。基本上,列的唯一性就丢失了。 imo
  • @IvankaTodorova 谢谢你!我必须在哪里执行这条线?
  • @Error404,你说你正在使用 phpmyadmin。只需将其粘贴到 SQL 选项卡中并点击执行即可。
  • @IvankaTodorova:嗯,无论你在哪里读到它,都是错误的。 AUTO_INCREMENT 列自动生成值。而已。面对行删除等情况,该列上的 UNIQUE 键不会使此类列永远唯一,您可以根据自己的喜好修改自动生成的值.
【解决方案2】:

执行这个SQL语句:

ALTER TABLE tablename AUTO_INCREMENT = 1

【讨论】:

    【解决方案3】:

    这通常是个坏主意。自动增量用于创建行的唯一 ID。想象一下,你有一个记录“1 - John”。然后你删除它并添加另一个“1 - Jack”。从通用数据库逻辑的角度来看,John 似乎被重命名为 Jack(它具有相同的 ID = 它是同一个实体)而不是另一条记录。您应该让 DB 为每条新记录分配新 ID,即使在删除记录后留下空白。

    如果你真的想这样做,你可以使用这个查询来修改自动增量值:

    ALTER TABLE users AUTO_INCREMENT=123
    

    但这仍然不是自动增量的设计方式。

    【讨论】:

    • "当你删除它并添加另一个“1 - Jack”时。从常见的数据库逻辑来看,似乎John被重命名为Jack(它具有相同的ID =它是同一个实体)“不是真的,如果你的外键约束正确级联。
    • @LightnessRacesinOrbit 我所有的表都包含级联属性。如果我更改索引列。所有表都会改,对吗?
    • @Error404:是的,应该是。测试以确保。
    【解决方案4】:

    我也为此苦苦挣扎,然后在“操作”选项卡中找到,“自动增量”下有一个设置,您可以在其中设置它将开始的数字,因此您可以根据需要回滚这样做。

    【讨论】:

      【解决方案5】:

      这是可能的。它不是 phpmyadmin 的特性,而是 mysql 的特性。执行这个

      ALTER TABLE tablename AUTO_INCREMENT = 1
      

      更多信息请访问stackoverflow

      而在mysql reference

      【讨论】:

        猜你喜欢
        • 2017-10-24
        • 2016-03-19
        • 2011-08-05
        • 2011-03-02
        • 1970-01-01
        • 2011-05-19
        • 1970-01-01
        • 1970-01-01
        • 2019-03-04
        相关资源
        最近更新 更多