【问题标题】:automatically reassign the value of primary key in a MySql table after the record for that key is deleted删除该键的记录后,自动重新分配 MySql 表中主键的值
【发布时间】:2013-01-31 06:56:11
【问题描述】:

我在 phpMyadmin 中使用 MySql。我有一个包含主键的表。这个主键是'userid',它也是一个“自动增量”字段。该应用程序还具有删除具有“用户 ID”的特定用户的功能。因此,当我再次创建新用户时删除用户后,“userid”将获得下一个整数的值。我希望表考虑删除并分配主键值,已删除的数字 ..

示例: 表中的 'userid' 值为 - 1,2,3,4,5,6,7.... 我删除了值为 3 的用户 ID。 所以现在当我创建用户的下一条记录时,该表应该使用用户 ID 值“3”,因为它不再使用。我如何在 phpmyadmin 中做到这一点?

我想这样做以保持用户 ID 的值最小。计数可能会达到用户 ID 的 5 位数值。因此,如果一个 2 位可以使用,因为它之前被删除,使用这个 2 位值将节省数据库的内存使用

【问题讨论】:

  • 这是不可能的,因为你有一个 user_id 的自动增量值,
  • 你知道在删除你正在删除的那个 user_id 时,将那个 id 分配给它,这只有在不使用自动增量并且你自己为用户分配一个唯一的 id 时才有效
  • 但如果我删除 AI,那么我将不得不跟踪已删除和正在使用的用户 ID 值,这将是一个开销。每次插入记录时,我都必须手动输入用户值。那么如何在数据库中节省内存呢?
  • 其实简单来说,你想太多了,这和内存无关,如果你使用自动增量,你不必分配删除的user_id,因为它没有意义,如果您分配该已删除的 id,因为为此您还必须搜索哪些 id 已被删除,因此请避免正在做的事情,
  • 我使用的逻辑是“一个值中的数字越多,数据库使用的内存就越多”。因此得出的结论是“使用的内存会更多”,因此寻找解决方案

标签: mysql database phpmyadmin primary-key primary-key-design


【解决方案1】:

完全可以通过在下一次插入时明确提供不再使用的 ID 来分配它。 AUTO_INCREMENT 仅在您不自己提供 id 时分配。

确定ID确实没有被使用,否则插入会失败。

话虽如此,我不鼓励这样做。我不是 100% 肯定,但我认为当你在 MySQL 中声明一个整数时,它需要整数空间,不管整数有多少位,但我愿意澄清这一点。无论如何,我相信可能使用更少空间的微小好处不值得通过修改您的 ID 来冒险失败。

根据我的经验,这些小事以后会困扰你,我看不到真正的好处。

如有必要,我建议寻找其他方法来提高内存使用率。

【讨论】:

    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 2012-12-14
    相关资源
    最近更新 更多