我在我的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。这些是在约束下出现的那种东西。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top