您何时可以在数据库标识字段上设置增量值?

时间:2009-08-05 10:44:56

标签: sql sql-server database identity

鉴于表格:

CREATE TABLE Table1
(
    UniqueID int IDENTITY(1,1)
    ...etc
)

现在为什么要将增量设置为1以外的其他值?

我可以理解以不同方式设置初始种子值。例如,如果您每月创建一个数据库表(例如Table1_082009Table1_092009),并且想要启动新表的唯一ID,而旧表停止。 (我可能不会自己使用这种策略,但是嘿,我可以看到人们这样做了。)

增量?我只能想象它在奇怪的情况下有用,例如:

  • 在插入初始数据之后,可能稍后有人会想要转换身份插入并在空白处插入新行,但是为了有效地查找索引会希望行彼此接近吗?
  • 如果您直接从URL查找ID,并希望让人们更难以随意访问其他项目(例如,而不是用户能够解决从{更改URL后缀)的问题{1}}到/GetData?id=1000,您将增量设置为437,以便下一个网址实际为/GetData?id=1001)?当然,如果这是你的“安全”,那么你可能已经遇到了麻烦......

我想不出别的什么。有没有人使用过不是1的增量,为什么?我真的很好奇。

3 个答案:

答案 0 :(得分:4)

一个想法可能是使用它来促进数据的分区(尽管可能有更多“自动”方式)

  • 考虑到你有两台服务器:
    • 在一台服务器上,从1开始,以2递增
    • 在另一台服务器上,从2开始并按2递增。
  • 然后,从您的应用程序中,您的发送一半插入一个服务器,另一半插入第二个服务器
    • 某种软件负载平衡

这样,您仍然可以识别您的条目:“UniqueID”仍然是唯一的,即使数据在两个服务器/表上分开。

但这只是一个疯狂的想法 - 可能还有一些其他的用途......

答案 1 :(得分:2)

曾经,为了纯粹的乐趣,(哦,是的,我们有一个狂野的方面给我们)决定负增量。奇怪的是,这些数字在规模上越来越大,同时价值也越来越小。

我几乎无法坐在椅子上。


编辑 (事后补充):
你认为IDENTITY的创造者爱上了FOR循环吗?你知道..

for (i = 0; i<=99; i+=17)

或那些非半结肠的人

For i = 0 to 100 step 17

答案 2 :(得分:0)

仅限娱乐。你必须真的很无聊。