sql-server - 当删除约束时,支持索引也会被删除吗?

标签 sql-server indexing constraints sql

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

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

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

感谢您的帮助。

赛斯

最佳答案

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

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

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

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

关于sql-server - 当删除约束时,支持索引也会被删除吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2291911/

相关文章:

sql - TSQL Counting Nulls - 所有分组的项目都有 NULL 字段

c++ - 从 UPDATE 查询中获取 'Cannot insert duplicate key'

c# - 使用 ASP.Net 的 Crystal Reports 中的 Blob 字段

mysql - 索引 SET 字段

php - 加载 MySQL 查询需要很多时间?如何高效调优数据库

sql - sql 中的匹配列表

php - 在 PHP 中执行服务器端输出缓存的最佳方法是什么?

PostgreSQL:非空 JSON 对象的 CHECK 约束

ms-access - 使用 ON DELETE CASCADE 定义表时出现语法错误

mysql - 使用外键约束更新值