【发布时间】:2012-04-02 08:12:05
【问题描述】:
我的数据库中有此列。假设它的名字是'threadid'。 它包含为每个线程分配的唯一 ID 以进行区分。
线程ID 9 8 7 6 5 4 3 2 1
假设我删除了 id 为 5 和 6 的线程。
线程ID 9 8 7 4 3 2 1
但是当删除后有提交的时候,给那个线程的唯一id是10。不是5。我觉得这不整洁。
如何在列中获得尽可能少的值? (在本例中为 5。)
我认为我可以使用 MIN() 获取列的最小值并保持 +1,直到我得到未使用的唯一值,但我认为这太复杂了。
有什么简单的方法吗?
谢谢。
【问题讨论】:
-
我知道这并不重要,但很好奇你为什么想要这个?只是为了保持数字干净,还是为了别的?
-
@jprofitt 我同意;在
bigint(20)列中,ID 值中的间隙并不重要(: -
这个问题每周都会出现几次。底线是:您不想“重用”丢失的号码。原因有很多,不适合评论一一列举。如果您想要“漂亮”的有序数字,请不要使用 auto_increment 。 auto_increment 有一个且只有一个目的 - 唯一地 标识一行。而已。那里没有“它很漂亮”。如果必须有一个很好的顺序编号,创建另一个列并通过触发器维护它。
-
我不同意谁对此投反对票,仅仅因为实现不是规范并不意味着它没有用处,在某些情况下,必须这样做。我要对此投赞成票。
-
@所有不同意的人。就像我说的,它是实现的要求,因此你必须想出一个解决方案。如果你能想出一个不同的,那就是我的猜测。这应该是一个问答论坛,您应该提出问题的答案,而不是我的选择或应该做什么。有用于讨论最佳实践的programmer.stackexchange.com。
标签: mysql database auto-increment