删除约束时,支持索引也会被删除吗?

时间:2010-02-18 20:20:26

标签: sql-server indexing constraints sql

我正在尝试记住一些sql语法,并且我已经获得了ALTER TABLE ADD CONSTRAINT语法。当我说使用这种语法添加FOREIGN KEY或PRIMARY KEY约束时,我相信我是正确的,sql server会自动创建索引以支持约束操作。 (这是真的......还是仅在PK而不是FK?)

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

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

感谢您的帮助。

赛斯

4 个答案:

答案 0 :(得分:2)

主键约束将向表添加聚簇索引(如果不存在),否则将为其创建唯一的非聚簇索引。

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

外键约束不会添加索引。

删除外键约束对索引无效。

外键与索引无关。

答案 1 :(得分:2)

如果您需要添加一个索引,FK不会自动获取SQL Server中的索引!删除FK时,不删除索引,您需要自行删除索引。

答案 2 :(得分:2)

将删除强制执行UNIQUE约束的索引,不会自动删除支持FK约束的一个索引。它也不会自动创建。

答案 3 :(得分:2)

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

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

删除约束时,将删除因创建约束而创建的任何索引。但是,如果您尝试删除唯一或主键约束并且有引用它的外键约束,则会出现错误。

使用DROP INDEX无法删除因创建约束而创建的索引。