为什么我的唯一约束出现在索引下而不是在约束下?

时间:2009-06-18 14:29:48

标签: sql-server tsql ssms

我在我的tsql表上创建了一个约束:

alter table disabledqualities
add constraint uc_uIdQualCode
unique (userId, qualitycode)

在MSSMStudio中,约束显示在索引下,而不是在约束下。

为什么?

- EDIT--
我知道它创建了一个强制执行约束的索引,但是为什么有一个名为“约束”的节点?

7 个答案:

答案 0 :(得分:4)

SQL Server在场景后面创建索引以强制执行约束

这是另一种编写方法,通过添加非聚集告知sql server来使用非聚簇索引,你也可以创建一个聚簇,只要你没有聚集的PK(默认)或另一个聚簇索引

alter table disabledqualities
add constraint uc_uIdQualCode
unique nonclustered (userId, qualitycode)

[编辑] 该节点要添加检查约束,在索引

下添加唯一约束

要么远离巫师

答案 1 :(得分:1)

检查约束和默认约束显示在约束节点下。

答案 2 :(得分:0)

SQL使用索引来强制执行唯一约束。

答案 3 :(得分:0)

  

据我所知,它创建了一个强制执行约束的索引,但为什么会出现一个名为“约束”的节点?

此节点用于显示CHECK约束。

答案 4 :(得分:0)

真正的答案是“因为微软这么说。如果你想要答案,你就得问问他们”。

答案 5 :(得分:0)

因为可以在sysindexes系统视图中找到UNIQUE约束

从sysindexes中选择*,其中name ='uc_uIdQualCode'

这是合乎逻辑的 要从Studio添加新的唯一constaint,您需要单击Manage Index and Keys按钮。因此,如果您要从索引中添加它,则必须在索引中看到它:)

答案 6 :(得分:0)

我想也许你不明白在限制条件下会出现什么,因为你不知道检查约束是什么。检查约束将检查插入或更新的数据,以查看它是否符合某种业务规则。它用于确保数据完整性。例如,如果您有一个只应包含值1,4或5的整数字段,那么您将设置一个检查约束以确保9不会添加到该字段中。日期字段上的检查约束可能指定它必须晚于PlannedCompletionDate字段的当前日期和时间,或者CompletionDate必须晚于StartDate。这些是在约束下出现的那种东西。