转载自 https://www.cnblogs.com/CreateMyself/p/6104345.html

唯一约束 

对字符串和文本类型无法添加唯一约束(索引字节最大为900,所以这里我们取的max会出错,而不是针对于类型)

 

(*)主键约束和唯一约束的区别?

主键约束:通过对列强制唯一性,此时主键在列上创建一个聚集索引且主键不能为空。

唯一约束:通过对列强制唯一性,此时在列上创建的唯一键为非聚集索引,唯一约束仅仅允许一个NULL值。

二者最大区别在于:主键约束强调的是行的唯一性来标识行,不允许重复,而唯一约束强调的是列的唯一性不允许重复。 

 

(*)唯一约束和唯一索引区别

唯一约束不能筛选,而唯一索引能进行筛选,如下

CREATE UNIQUE NONCLUSTERED INDEX uq_code_filter
ON test(Code) WHERE Code is not null;

 

外键约束 

外键必须是另一张表的主键或者是唯一约束

 

check约束

ALTER TABLE dbo.Employees
 ADD CONSTRAINT CHK_Employees_salary
 CHECK(salary > 0.00)

如果试图插入非正值,将会被数据库所拒绝。我们需要注意的是Check约束只是对于结果为false才会拒绝,如果结果为True或者UNKNOWN是会被接受,即当结果为NULL时也会插入或者修改成功。

 

默认约束

ALTER TABLE dbo.Employees
 ADD CONSTRAINT DFT_Employees_updateTime
DEFAULT(GETDATE()) FOR UpdateTime