SQL Server - 唯一索引与唯一约束 - 回复。重复值

var*_*ble 8 sql-server unique-index unique-constraint

唯一索引可确保索引键列中的值是唯一的。唯一约束 保证不能将重复值插入到创建约束的列中。创建唯一约束时,会在列上自动创建相应的唯一索引。

问题

  1. 如果我们在列上有唯一索引并且没有唯一约束,是否可以插入重复值?
  2. 列上任何现有重复项怎么样 - 它是否允许创建唯一索引或唯一约束?

Dan*_*man 6

如果我们在列上有唯一索引并且没有唯一约束,是否可以插入重复值?

通常,当列上存在唯一索引时,无法插入重复值并且会引发错误。例外情况是:

  1. 索引是使用该选项创建的IGNORE_DUP_KEY。不会引发错误并且插入会被忽略。

  2. 过滤非聚集索引,使得重复值不满足索引WHERE子句。该行已插入,但未反映在非聚集索引中。

列上任何现有重复项怎么样 - 它是否允许创建唯一索引或唯一约束?

不,除了上面提到的过滤索引。

  • 只是为了澄清,使用“IGNORE_DUP_KEY”不允许索引中存在重复值。唯一索引永远不会有重复值。相反,“IGNORE_DUP_KEY”只会导致插入重复值的尝试被忽略(带有警告消息),而不是导致错误。 (4认同)