如果表中不存在聚集索引的话并且我们没有明确指定一个非聚集索引的话,通过主键约束将自动创建一个唯一聚集索引。
当创建唯一约束时,默认情况下一个非聚集索引会被创建来强制一个唯一约束,如果在表中聚集索引不存在的话,我们可以指定一个聚集索引。
【2】唯一约束和唯一索引区别
我们接下来创建一个表,如下:
CREATE TABLE test
(
Id INT NOT NULL PRIMARY KEY,
Code INT
)首先我只对Code创建唯一索引
CREATE UNIQUE INDEX uq_ix ON dbo.test(Code)此时我们再在Code列上添加唯一约束:
ALTER TABLE StudyTest.dbo.test
ADD CONSTRAINT uq_nonclster_ix UNIQUE(Code)此时我们在索引文件夹下可以看到所创建的唯一索引和唯一约束所创建的唯一非聚集索引
看起来二者都是唯一非聚集索引,只是图标不一样而已,二者应该是一样的吧
(5)唯一索引和唯一约束的区别在哪里?唯一约束能替代唯一索引吗?

【1】返回错误码不同
当我们插入数据时,唯一索引返回错误代码为2601

唯一约束返回的错误代码为2627

【2】唯一约束不能筛选,而唯一索引能进行筛选,如下
CREATE UNIQUE NONCLUSTERED INDEX uq_code_filter
ON test(Code) WHERE Code is not null;
总结:上述只是表示二者在使用上的不同,对于唯一约束和唯一索引并没有什么很大的差异,同时对于唯一约束和唯一索引在查询性能上也没有很大的不同,对于唯一约束我们一直强调的是数据完整性,对列进行唯一约束保证其值不能重复,这同时对于建立索引查询时性能会有显著的提升。
外键约束
外键约束也用来强制数据完整性,外键的目的是限制在外键列中允许的值主要存在于那些被引用列中。下面我们来演示外键约束,我们创建如下雇员表和部门表:
USE SQLStudy;
IF OBJECT_ID('dbo.Department','U') IS NOT NULL
DROP TABLE dbo.Department
CREATE TABLE [dbo].[Department] (










