SQL Server,如果元素被删除,id会改变吗?

时间:2012-11-20 14:40:07

标签: sql

我想知道我是否将10个条目插入到SQL Server表中。 如果我然后删除其中一个,id / index会相应改变吗?

示例:

1 | Simon Cowell | 56 years
2 | Frank Lampard| 24 years
3 | Harry Bennet | 12 years

如果我删除#2,Harry Bennet的索引是否会变为2?

谢谢:)

编辑: 对不起我的愤怒,过了糟糕的一天。是的,我应该自己研究一下,我应该被投票。 我不要求任何东西,我只想说我很抱歉:|

4 个答案:

答案 0 :(得分:2)

没有。如果需要,您可以设置触发器或逻辑来执行此操作;但是,它不会自动执行此操作。

答案 1 :(得分:1)

由于您似乎在混淆“id / index”,所以我们先谈谈关系数据库上下文中的主键和索引。

分配给SQL数据库中的行的“id”或主键是该行的唯一标识符。它可以包含一列或多列。 (当涉及多个列时,它被称为“复合”或“多部分”键。)主键实际上应该只是用于寻址行的唯一句柄:主键不应包含任何关于行所代表的实体的信息,特别是如果该信息有可能是可变的;一个例子是一个零件号,其后缀代表零件的金属类型;如果那种金属可能会从钛变为unobtainium,那么,那个零件编号将成为一个不错的选择作为主键;最好有另一列来存储金属类型,而不是制作主键的金属类型后缀部分。 “有意义的”主键可能在遗留的非关系数据库中有一定意义,但在关系数据库中它们应该被避免。

当寻求强制实施主键的唯一性时,数据库引擎可以使用索引,以便快速测试密钥值是否存在。它可以使用二进制算法来查找值,避免需要逐行扫描实际数据“蛮力”,寻找值。 但引擎在幕后使用以帮助主键管理的索引与主键本身不同

如果你有一个简单的顺序整数作为你的主键,那么它们的数量是无限的,因此当它被分配到的行被删除时,没有必要重用一个整数。因此,关系数据库引擎不会自动尝试重用它,并且当数字序列中的“间隙”由a创建时,它不会以任何方式更改已分配给表中所有其他行的主键值。删除。其他表中的许多其他行可能引用这些值并使它们变得可变会产生混乱或巨大的低效率。

哈希算法是数据库引擎可以快速测试密钥值存在的另一种非常有效的方法。它计算散列文件中的位置,如果密钥存在,它将在那里找到密钥,然后查找它。行没有按特定顺序存储,因此这些方案针对即时查找大表中的记录进行了优化,而不是用于剔除具有共同特征的记录,例如zipcode 10023中的所有客户。

答案 2 :(得分:0)

不会自动更改

答案 3 :(得分:0)

不,它不会。希望,这是你希望的答案。对于任何自动生成的标识符(例如IDENTITY列),您应尽可能忽略数据类型并将其视为身份信息的不透明“blob”。

它在插入期间被分配,您可以将它用于交叉引用目的,但它的数字不是您应该使用或依赖的事实。它只是该行的稳定标识符。