唯一约束和唯一索引之间有什么区别

My *_* Me 10 sql-server sql-server-2000

以下两个陈述有什么区别?

alter table [dbo].[Demo] add constraint [UC_Demo_Code] unique ( [Code] )
go
create unique nonclustered index [UK_Demo_Code] on [dbo].[Demo] ( [NB_Code] )
go
Run Code Online (Sandbox Code Playgroud)

约束是否有索引来帮助它强制执行唯一性,还是会在每次插入/更新时执行表扫描?

Phi*_*ley 10

"逻辑"效果是相同的 - 只有唯一值可以加载到表中.(值得一提的是,如果列可以为空,则只能插入一行带NULL的行.)

物理效果是相同的 - 在表上建立了一个唯一的索引.它可以是聚簇的也可以是非聚簇的.

唯一真正的区别在于元数据,即描述存储在系统表中的数据库的信息.第一种方式,它在内部记录为索引,第二种方式,它被记录为约束 - 即使净效果相同.这意味着,最终,唯一的区别是创建它并在将来改变它所需的代码.

(对于SQL 7.0到2005,这是正确的,如果他们在2008年更改它,我会非常惊讶).