主键、唯一键、唯一索引的使用

  • 主键只能用一个,不能为NULL,唯一(可以多列作为复合主键,当所有设置为复合主键的列都相同是视为唯一,多对多的表中常用)
  • 唯一键,也称(唯一约束),和主键的区别是可以为有多个唯一键并且值可以为NULL,但NULL也不能重复,也就是说只能有一行的值为NULL。它会隐式的创建唯一索引。
    alter table 表名
    add constraint 约束名 unique(列名)
  • 唯一索引,几乎和唯一键一样,但可以添加过滤器来允许重复某些值
    CREATE UNIQUE INDEX 索引名 ON 表名 (列名)
    --如果要允许NULL重复
     WHERE 列名 IS NOT NULL 
    --如果还要允许值为xx重复
    and 列名!='xx'

     

对于唯一约束和唯一索引的选择,请参照MSDN上的指导,如下:

唯一约束和唯一索引并没有显著的区别。创建独立的唯一索引和使用唯一约束对于数据的验证方式并无区别。查询优化器也不会区分唯一索引是由约束创建还是手工创建。然而以数据完整性为目标的话,最好创建约束,这使得对应的索引的目标一目了然。

个人认为:如果需要允许重复某些值(如NULL)才用唯一索引

posted @ 2015-02-10 20:45  Laro  阅读(2138)  评论(0编辑  收藏  举报