【问题标题】:Why does my unique constraint show up under indexes rather then under constraints?为什么我的唯一约束出现在索引下而不是约束下?
【发布时间】:2010-11-04 00:29:10
【问题描述】:

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

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

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

为什么?

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

【问题讨论】:

    标签: sql-server tsql ssms


    【解决方案1】:

    SQL Server 在后台创建索引以强制执行约束

    这是另一种写法,通过添加非聚集告诉 sql server 使用非聚集索引,您还可以在没有聚集的 PK(默认)或另一个聚集索引的情况下创建聚集索引

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

    [编辑] 该节点是要添加检查约束,索引下添加唯一约束

    无论如何都要远离巫师

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        此节点用于显示CHECK 约束。

        【讨论】:

          【解决方案4】:

          真正的答案是“因为微软是这么说的。如果你想知道答案,你必须问他们”。

          【讨论】:

            【解决方案5】:

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

            select * from sysindexes where name = 'uc_uIdQualCode'

            这很合乎逻辑 要从 Studio 添加新的唯一约束,您需要单击管理索引和键按钮。所以如果你从索引中添加它,你必须在索引中看到它:)

            【讨论】:

              【解决方案6】:

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

              【讨论】:

                【解决方案7】:

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

                【讨论】:

                • 是的,或者两个键的组合应该是唯一的(不是主键)。所以我定义了一个独特的约束。我承认我的 SQL 知识可以使用一些改进,所以如果我错了,请纠正我。
                猜你喜欢
                • 2021-11-02
                • 2015-12-29
                • 2011-03-18
                • 2014-06-25
                • 2011-11-23
                • 2018-12-02
                • 1970-01-01
                • 2019-10-26
                相关资源
                最近更新 更多