【问题标题】:how to maintain a continuous id number row count in mysql如何在mysql中保持连续的id号行数
【发布时间】:2013-09-21 06:33:53
【问题描述】:

我有一个 id 列,它是整数和自动递增类型。

问题是每当我删除一行时,数字的连续性就会中断。

+----------------------+----+    
| name                 | id |    
+----------------------+----+    
| mashable             |  1 |    
| Behance              |  2 |    
| Techcrunch           |  3 |    
| flipkart             |  4 |   
+----------------------+----+

例如,如果我删除带有id=2 的行,那么我在 id 中的输出将是

+----------------------+----+
| name                 | id |
+----------------------+----+
| mashable             |  1 |
| Techcrunch           |  3 |
| flipkart             |  4 |
+----------------------+----+

但我希望它是这样的:

+----------------------+----+
| name                 | id |
+----------------------+----+
| mashable             |  1 |
| Techcrunch           |  2 |
| flipkart             |  3 |
+----------------------+----+

怎么办??

【问题讨论】:

  • 嗯,第一个问题是:为什么需要它?您只是希望它看起来不错,还是背后有一些强大的商业理由? MySQL 整数类型可以容纳足够多的值:dev.mysql.com/doc/refman/5.0/en/integer-types.html
  • ID 是你的主键吗?如果是这样,请不要这样做。
  • 如果不是主键那怎么办??那么为何不 ? @hims056
  • 目前没有任何具体的工作,但我确实想知道@biziclop
  • @Aayush:因为生命短暂,不必担心这样的事情,所以不值得OCD

标签: php mysql


【解决方案1】:

为了直接回答您的问题,以下是您修复顺序数字字段中的这些空白的方法:Fixing gaps in mysql table row id after we delete some of them

但是让我们在这里小心一点。

假设id 是您的主键。 ID 通常是对象的引用点,因为自动生成的 ID 是唯一的。称之为约定。

这意味着如果您的代码的 ANY 部分依赖于id 列,您的应用程序将会中断。

如果您需要 这样做,请使用其他字段作为主要参考。也许是一个独特的 name 字段或类似的东西。

如果 ID 不是您的主键,那么您可能应该为它选择另一个名称。无论如何,在这种情况下,你破坏任何东西的机会要小得多。

请注意,我说的是更小,但不是零。我们不了解您的应用程序,因此您的代码可能会将 id 用于重要的事情,这会给您带来麻烦。

【讨论】:

  • 以非主键字段,假设它是一个数字字段而不是id,它有什么区别?
  • 这就是我要问的,如果我的字段名称是number,现在它不是主要的,那么我怎样才能让它这样工作?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 2015-09-27
  • 2022-10-23
  • 2020-05-09
相关资源
最近更新 更多