聚集索引与聚集唯一索引 二者有什么区别吗?

解决方案 »

  1.   

    什么是主键?在数据库中,常常不只是一个表,这些表之间也不是相互独立的。不同的表之间需要建立一种关系,才能将它们的数据相互沟通。而在这个沟通过程中,就需要表中有一个字段作为标志,不同的记录对应的字段取值不能相同,也不能是空白的。通过这个字段中不同的值可以区别各条记录。就像我们区别不同的人,每个人都有名字,但它却不能作为主键,因为人名很容易出现重复,而身份证号是每个人都不同的,所以可以根据它来区别不同的人。数据库的表中作为主键的字段就要像人的身份证号一样,必须是每个记录的值都不同,这样才能根据主键的值来确定不同的记录。如果为表指定了 PRIMARY KEY 约束,则 SQL Server 2005 数据库引擎将通过为主键列创建唯一索引来强制数据的唯一性。当在查询中使用主键时,此索引还可用来对数据进行快速访问。因此,所选的主键必须遵守创建唯一索引的规则。 创建主键时,数据库引擎 会自动创建唯一的索引来强制实施 PRIMARY KEY 约束的唯一性要求。如果表中不存在聚集索引或未显式指定非聚集索引,则将创建唯一的聚集索引以强制实施 PRIMARY KEY 约束。唯一性约束
    1) 唯一性约束所在的列允许空值,但是主键约束所在的列不允许空值。
    (2) 可以把唯一性约束放在一个或者多个列上,这些列或列的组合必须有唯一的只。但是,唯一性约束所在的列并不是表的主键列。
    (3) 唯一性约束强制在指定的列上创建一个唯一性索引。在默认情况下,创建唯一性的非聚簇索引,但是,也可以指定所创建的索引是聚簇索引。主键: 
    1) 用于标识某行而且与之相关.
    2) 是不可能(或很难)更新.
    3) 不应该允许空(NULL).唯一域/字段:
    1) 用于作为访问某行的可选手段.
    2) 只要唯一就可以更新.
    3) 可以为空(NULLs).注意唯一和主键的区别,它们都是创建一个唯一的索引,一个表格仅含有一个主键约束列,但是,它有可能在其他列中含有许多的唯一约束
      

  2.   

    如果在创建聚集索引的时候不指定唯一性,SQLServer会在插入重复键值的时候增加一个4字节的字段来保证聚集键的唯一性。