【问题标题】:When dropping a constraint will the supporting indexes also be dropped?删除约束时,支持索引也会被删除吗?
【发布时间】:2010-02-18 20:20:26
【问题描述】:

我正在尝试记住一些 sql 语法,但我已经记下了 ALTER TABLE ADD CONSTRAINT 语法。我相信我说的是正确的,当您使用此语法添加 FOREIGN KEY 或 PRIMARY KEY 约束时,该 sql server 会自动创建索引以支持约束操作。 (这是真的……还是只在 PK 上是这样,在 FK 上不是这样?)

如果是这样,当您使用 ALTER TABLE DROP CONSTRAINT 语法时...是否也会自动删除支持索引?可以显式删除这些隐式支持索引吗?如果是这样,CONSTRAINT 会自动删除吗?

我只是想知道它是如何“在幕后”工作的。谷歌搜索没有帮助。我想我可以查询一些 sys 表来发现真相,但我想我会在这里尝试。

感谢您的帮助。

赛斯

【问题讨论】:

    标签: sql-server indexing constraints sql


    【解决方案1】:

    当您添加主键时,实际上添加了唯一索引。该添加是否导致新索引聚集取决于您是否指定它是非聚集的。如果在添加主键约束时,您没有指定它是聚簇还是非聚簇,如果表上不存在聚簇约束或索引,它将是聚簇的,否则它将是非聚簇的。

    添加外键时,不会自动创建索引。

    当您删除约束时,由于创建约束而创建的所有索引都将被删除。但是,如果您尝试删除唯一键或主键约束并且存在引用它的外键约束,您将收到错误消息。

    由于创建约束而创建的索引不能使用 DROP INDEX 删除。

    【讨论】:

      【解决方案2】:

      主键约束将在表上添加一个聚集索引,如果一个尚不存在,否则将为它创建一个唯一的非聚集索引。

      删除主键约束也将删除基础索引。

      外键约束不会添加索引。

      删除外键约束对索引没有任何作用。

      外键与索引无关。

      【讨论】:

      • 并非总是如此。如果表上已经存在聚集索引,则 PRIMARY KEY 约束将由唯一的非聚集索引强制执行。
      • 在 SQL Server 2008 中,外键与索引有一些共同点。我无法删除索引(而且它不是主键索引),因为 if 被外键引用。
      • @LukLed,当你有一个用 FK 强制执行的一对多父子关系时,父级需要是唯一的,如果你试图放弃对父级的唯一性约束,它会抛出一个错误。
      • @KM:所以外键与索引有关。外键直接连接到索引。如果您在同一列上有两个唯一索引并创建外键,则特定的索引将被外键阻止。
      • 那么...删除 PK 约束会自动删除索引吗?
      【解决方案3】:

      FK 不会自动在 SQL Server 中获取索引,如果需要,您需要添加它!删除 FK 时,您不会删除索引,您需要自己删除索引。

      【讨论】:

        【解决方案4】:

        执行 UNIQUE 约束的索引将被删除,支持 FK 约束的索引不会被自动删除。也不会自动创建。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-10
          • 2011-12-29
          • 2016-11-19
          • 1970-01-01
          • 2010-10-27
          • 2022-07-20
          • 2012-01-20
          • 1970-01-01
          相关资源
          最近更新 更多