【发布时间】:2015-09-03 06:51:33
【问题描述】:
有什么方法可以让主键具有增加主键但填补空白的功能?假设我有下表:
____________________
| ID | Value |
| 1 | A |
| 2 | B |
| 3 | C |
^^^^^^^^^^^^^^^^^^^^^
注意,数值只是一个例子,顺序与问题无关。
一旦我删除了 ID 为 2 的行(表格将如下所示):
____________________
| ID | Value |
| 1 | A |
| 3 | C |
^^^^^^^^^^^^^^^^^^^^^
我添加了另一行,具有常规自动增量功能,它看起来像这样:
____________________
| ID | Value |
| 1 | A |
| 3 | C |
| 4 | D |
^^^^^^^^^^^^^^^^^^^^^
正如预期的那样。
我想要的输出是:
____________________
| ID | Value |
| 1 | A |
| 2 | D |
| 3 | C |
^^^^^^^^^^^^^^^^^^^^^
空白处用新行填充。另请注意,在记忆中,它可能看起来会有所不同。但关键是主键会填补空白。
当有主键时(例如)1, 2, 3, 6, 7, 10, 11,4应该先填,然后5,8等等......当表为空时(即使它有一个百万行之前)它应该从 1 重新开始。
我该如何做到这一点?有没有类似的内置功能?我可以实现吗?
编辑:如果不可能,为什么不呢?
【问题讨论】:
-
没有。也不要自己做。你需要它做什么?
-
没有真正的理由这样做。自动生成的 ID 的唯一目的是唯一,并且 bigints(或您使用的任何东西)可以上升到如此巨大的值,如果您担心的话,您永远没有机会达到极限。
-
@juergend 它可以简化许多操作,例如使用 id 生成随机行(带有内置随机函数,如
Random.Next()或rand())。 -
PK 的随机生成器不是一个好主意,它会导致页面拆分和重新排序,影响性能和存储。 PK 在按顺序插入时是最佳的。
标签: sql sql-server