PRIMARY KEY 约束
表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。当为表指定 PRIMARY KEY 约束时,Microsoft® SQL Server™ 2000 通过为主键列创建唯一索引强制数据的唯一性。当在查询中使用主键时,该索引还可用来对数据进行快速访问。如果 PRIMARY KEY 约束定义在不止一列上,则一列中的值可以重复,但 PRIMARY KEY 约束定义中的所有列的组合的值必须唯一。如下图所示,titleauthor 表中的 au_id 和 title_id 列组成该表的组合 PRIMARY KEY 约束,以确保 au_id 和 title_id 的组合唯一。当进行联接时,PRIMARY KEY 约束将一个表与另一个表相联。例如,若要确定作者与书名的对应关系,可以使用 authors 表、titles 表和 titleauthor 表的三向联接。因为 titleauthor --------------
创建唯一索引
在 SQL Server 中,当唯一性是数据本身的特点时,可创建唯一索引,但索引列的组合不同于表的主键。例如,如果要频繁查询 employee 表(该表主键为 emp_id)的社会保障号 (ssn) 列,而且要保证保障号是唯一的,则在 ssn 上创建唯一索引。如果用户为多个员工输入了相同的社会保障号,则数据库显示错误,并且不能保存该表。当创建或修改唯一索引时,可以设置选项以忽略重复的键。如果已设置该选项,并且试图通过添加或更新将影响多行的数据来创建重复键(使用 INSERT 或 UPDATE 语句),则不能添加导致重复的行,或在更新时放弃这样的行。例如,在已含有"Jones"的表中试图用"Jones"更新"Smith",则在结果表中只有一个"Jones",而没有"Smith"。原有的"Smith"行丢失,因为 UPDATE 语句实际上是 DELETE 语句后跟一个 INSERT 语句。"Smith"已删除,而试图插入另一个"Jones"的操作失败。整个事务不能回滚,因为该选项的目的是允许事务,而无管是否存在重复项。创建唯一索引 在数据库关系图中选择要创建索引的表,右击该表,然后从快捷菜单中选择"索引/键"命令。 
-或-为要创建索引的表打开表设计器,在表设计器中右击,然后从快捷菜单中选择"索引/键"命令。选择"新建"命令。"选定的索引"列表显示系统分配给新索引的名称。
在"列名"下选择要创建索引的列。可以选择多达 16 列。为获得最佳性能,只为每个索引选择一列或两列。对所选的每个索引,指出索引是按升序还是降序组织列值。
选择"创建 UNIQUE"复选框。
选择"索引"选项。
如果要忽略将在索引中创建重复键的新数据或更新数据(使用 INSERT 或 UPDATE 语句),则选择"忽略重复键"选项。 
当保存表或关系图时,索引即创建在数据库中。注意   如果某列有多行包含 NULL 值,则不能在该列上创建唯一索引。同样,如果列的组合中有多行包含 NULL 值,则不能在多个列上创建唯一索引。在创建索引时,这些被视为重复的值。

解决方案 »

  1.   

    呵呵,这是sql server的online book吧。我不需要这样的回答,我要
    总结性的观点,用自己的话!
      

  2.   

    only one primary key in a table.
    primary key is unique.
    primary key can't have null value
    if not exist, primay key is by default clustered index.
    can be referenced by foreign keycan have multiple unique keys in one table.
    by default, unique key has a nonclustered index on it.
    unique key can have null value, as long as there's only one null.
      

  3.   

    to w_rose:
    "主键就等于在无主键时声明一个唯一索引并且是聚簇索引"
    那么主键与索引的概念差不多?