为什么我的唯一约束出现在索引下而不是在约束下?
-
06-07-2019 - |
题
我在我的tsql表上创建了一个约束:
alter table disabledqualities
add constraint uc_uIdQualCode
unique (userId, qualitycode)
在MSSMStudio中,约束显示在索引下,而不是在约束下。
为什么?
- EDIT--结果 我知道它会创建一个索引来强制执行约束,但为什么会有一个名为“constraints”的节点?
解决方案
SQL Server在场景后面创建索引以强制执行约束
这是另一种编写方法,通过添加非聚集告知sql server来使用非聚簇索引,你也可以创建一个聚簇,只要你没有聚集的PK(默认)或另一个聚簇索引
alter table disabledqualities
add constraint uc_uIdQualCode
unique nonclustered (userId, qualitycode)
[编辑] 该节点要添加检查约束,在索引
下添加唯一约束要么远离巫师
其他提示
检查约束和默认约束显示在约束节点下。
SQL使用索引来强制执行唯一约束。
据我所知,它创建了一个强制执行约束的索引,但为什么会出现一个名为“constraints”的节点?
此节点用于显示 CHECK
约束。
真正的答案是“因为微软这么说。如果你想要答案,你将不得不问他们。“
因为可以在sysindexes系统视图中找到UNIQUE约束
从sysindexes中选择*,其中name ='uc_uIdQualCode'
这是合乎逻辑的 要从Studio添加新的唯一constaint,您需要单击Manage Index and Keys按钮。因此,如果您要从索引中添加它,则必须在索引中看到它:)
我想也许你不明白在限制条件下会出现什么,因为你不知道检查约束是什么。检查约束将检查插入或更新的数据,以查看它是否符合某种业务规则。它用于确保数据完整性。例如,如果您有一个只应包含值1,4或5的整数字段,那么您将设置一个检查约束以确保9不会添加到该字段中。日期字段上的检查约束可能指定它必须晚于PlannedCompletionDate字段的当前日期和时间,或者CompletionDate必须晚于StartDate。这些是在约束下出现的那种东西。