- 主键只能用一个,不能为NULL,唯一(可以多列作为复合主键,当所有设置为复合主键的列都相同是视为唯一,多对多的表中常用)
- 唯一键,也称(唯一约束),和主键的区别是可以为有多个唯一键并且值可以为NULL,但NULL也不能重复,也就是说只能有一行的值为NULL。它会隐式的创建唯一索引。
alter table 表名 add constraint 约束名 unique(列名)
- 唯一索引,几乎和唯一键一样,但可以添加过滤器来允许重复某些值
CREATE UNIQUE INDEX 索引名 ON 表名 (列名) --如果要允许NULL重复 WHERE 列名 IS NOT NULL --如果还要允许值为xx重复 and 列名!='xx'
对于唯一约束和唯一索引的选择,请参照MSDN上的指导,如下:
唯一约束和唯一索引并没有显著的区别。创建独立的唯一索引和使用唯一约束对于数据的验证方式并无区别。查询优化器也不会区分唯一索引是由约束创建还是手工创建。然而以数据完整性为目标的话,最好创建约束,这使得对应的索引的目标一目了然。
个人认为:如果需要允许重复某些值(如NULL)才用唯一索引