唯一约束有助于保持数据完整性。这可确保表中的指定列的任意两行都不会具有相同的非空值。唯一约束是作为索引在表上创建的。
SQL 标准的唯一约束定义规定,列定义不允许使用空值。缺省情况下,如果在列定义中省略 null 或 not null 关键字,Adaptive Server 则会将列定义为不允许使用空值(如果尚未使用 sp_dboption 进行更改)。
不要将唯一和主键完整性约束与 sp_primarykey、sp_foreignkey 和 sp_commonkey 定义的信息相混淆。唯一约束和主键约束实际上会创建索引来定义表列的唯一或主键属性。sp_primarykey、sp_foreignkey 和 sp_commonkey 为通过创建索引和触发器而强制的表列定义键(在 syskeys 表中)的逻辑关系。
缺省情况下,唯一约束创建唯一的非聚簇索引;主键约束创建唯一的聚簇索引。可以使用上述任一类型的约束声明聚簇或非聚簇索引。
例如,以下 create table 语句使用表级唯一约束来确保在 stor_id 和 ord_num 列中没有哪两行具有相同的值:
create table my_sales (stor_id char(4), ord_num varchar(20), date datetime, unique clustered (stor_id, ord_num))
一个表只能有一个聚簇索引,所以只能指定一个唯一的聚簇约束或主键聚簇约束。
强制实施数据完整性时,可以使用唯一约束和主键约束来创建唯一索引(包括 with fillfactor、with max_rows_per_page 和 on segment_name 选项)。但是,索引可提供附加功能。
创建唯一约束
在表中,选择“唯一约束”文件夹。
选择“文件”|“新建”|“唯一约束”。将打开“创建唯一表约束”(Unique Table Constraint Creation) 向导。
“创建唯一表约束”(Unique Table Constraint Creation) 向导会要求您提供以下信息:
输入 |
说明 |
|---|---|
名称 |
新约束的名称。 |
列 |
选择属于约束的列。 |
段 |
指定约束所在的段。 |
填充因子 |
(可选)指定填充因子调整和值。与“每页的最大行数”互斥。 |
每页行数 |
(可选)指定每页最大行数的值。与“填充因子”互斥。 |
聚簇索引 |
如果该表中没有聚簇索引,则可以将此约束指定为聚簇约束。 |
页间距 |
对约束创建的索引执行扩展 I/O 分配操作时填充的页与剩下的空白页的比率。 |
选择“唯一约束”文件夹。在右窗格中,双击“添加唯一约束”图标。