Set*_*man 6 sql sql-server indexing constraints
我试图记住一些sql语法,我已经得到了ALTER TABLE ADD CONSTRAINT语法.当我说使用这种语法添加FOREIGN KEY或PRIMARY KEY约束时,我相信我是正确的,sql server会自动创建索引来支持约束操作.(这是真的......还是仅在PK而不是FK?)
如果是这样,当您使用ALTER TABLE DROP CONSTRAINT语法时...支持索引是否也会自动删除?可以明确删除这些隐式支持索引吗?如果是这样,CONSTRAINT会自动删除吗?
我只是想知道它是如何工作的"幕后".谷歌搜索没有帮助.我想我可以查询一些sys表来发现真相,但我想我会在这里试试.
谢谢你的帮助.
赛斯
当您添加主键时,实际上添加了唯一索引。该添加是否导致新索引成为聚集索引取决于您是否指定它为非聚集索引。如果在添加主键约束时,没有指定它是聚集还是非聚集,则如果表中不存在聚集约束或索引,则它将是聚集的,否则它将是非聚集的。
添加外键时,不会自动创建索引。
当您删除约束时,由于创建约束而创建的任何索引都将被删除。但是,如果您尝试删除唯一键或主键约束,并且存在引用它的外键约束,则会出现错误。
无法使用 DROP INDEX 删除因创建约束而创建的索引。