【发布时间】:2019-05-15 07:54:50
【问题描述】:
我在 SQL Server 2016 中创建表时遇到标识规范问题。
- 在 Id 列中,我将 Identity Increment 和 Identity Seed 设置为 1。
- 接下来我将新记录添加到新表中。
- 在 Id 列中显示 2 个值。为什么?为什么不是 1 个值?
- 接下来删除第一条记录并添加新记录。在 Id 列中显示 3 个值。为什么?为什么不是 1 个值。
- 接下来我使用命令“update nametable set id=1”并收到无法更新标识列 ID 的答案。为什么?
【问题讨论】:
-
何必呢? ID 值没有意义,但不应重复使用。
-
之所以每次都获得一个新值,为什么从不重复使用旧值以及为什么不能更改 ID,仅仅是因为之前已经使用了其他值。 ID 必须永远唯一标识特定行。否则可能会导致混乱,破坏外键关系,并且通常难以理解哪个记录是哪个记录。
-
例如,假设您有一个“图像”表,记录 1 存储一个文件名和一个描述“猫的图片”。记录 2 是一个文件名和描述“狗的图片。您将它们显示在网页上,人们可以为他们喜欢的图像添加书签 - 从逻辑上讲,书签与唯一 ID 相关联。现在假设您删除了图像 1。它不见了,人们的书签不再起作用,但你只是给他们一个“对不起,运气不好”的信息。
-
...但是如果您随后添加一条名为“蠕虫图片”的新记录...如果 ID 1 可以重复使用,那么所有收藏 ID 1 的人都会访问现场看到了他们没想到的东西,一头雾水。这当然是一个微不足道的例子,但如果表格是“客户”、“员工”或“银行账户”,希望您能看到更严重的影响
标签: sql sql-server identity