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

时间:2018-10-17 09:43:01

标签: sql-server unique-constraint unique-index

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

问题

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

2 个答案:

答案 0 :(得分:1)

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

否,索引中列的值必须在该索引中创建一组唯一的数据。

  1. 该列中任何现有重复项如何处理-它会允许创建唯一索引或唯一约束吗?

否,您不能在具有重复值的表上创建唯一索引。

最简单的发现方法是尝试(我建议这样做,这是一种很好的学习方式):

CREATE TABLE dbo.SomeTable (SomeInt int, AnotherInt int);
GO

INSERT INTO dbo.SomeTable (SomeInt,
                           AnotherInt)
VALUES (1,1),
       (1,2),
       (2,1);
GO
--Create a unique index on a column with duplicate values
CREATE UNIQUE INDEX UQ_SomeInt ON dbo.SomeTable(SomeInt); --fails
GO
--Create a unique index on the 2 columns, as they are unique
CREATE UNIQUE INDEX UQ_Some_AnotherInt ON dbo.SomeTable(SomeInt, AnotherInt); --Succeeds
GO
--Try to insert a duplicate value
INSERT INTO dbo.SomeTable (SomeInt,
                           AnotherInt)
VALUES(2,1); --fails
GO

SELECT *
FROM dbo.SomeTable
GO
DROP TABLE dbo.SomeTable;

答案 1 :(得分:1)

  

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

通常,当列上存在唯一索引时,不能插入重复的值。例外是:

1)使用IGNORE_DUP_KEY选项创建了索引

2)对非聚集索引进行过滤,以使重复值不满足索引WHERE子句

  

该列中任何重复项的现有重复项如何?   创建唯一索引或唯一约束?

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