唯一性(UNIQUE)约束用来限制不受主键约束的列上数据的唯一性,即表中任意两行在指定列上都不允许有相同的值。一个表上可以放置多个UNIQUE约束。
唯一性约束和主键约束的区别如下:
唯一性约束允许在该列上存在NULL值,而主键约束限制更为严格,不但不允许有重复,而且不允许有空值。
在创建唯一性约束和主键约束时,可以创建聚集索引和非聚集索引,但在缺省情况下,主键约束产生聚集索引,唯一性约束产生非聚集索引。
1.使用Transact-SQL语句创建唯一约束
创建唯一性约束的语法格式为:
[ CONSTRAINT constraint_name ] UNIQUE [ CLUSTERED | NONCLUSTERED ]
( col_name [,…n])
【例3.32】 在sales数据库中创建表Department,包含dep_id、dep_name和dep_head三个字段,并在dep_name字段上创建唯一性约束。
CREATE TABLE Department ( dep_id int PRIMARY KEY, dep_name char(20) CONSTRAINT unq_depname UNIQUE, dep_head char(5) )
也可以在定义完所有列之后指定唯一性约束。例3.32中的CREATE TABLE语句也可以写成如下形式:
CREATE TABLE Department ( dep_id int PRIMARY KEY, dep_name char(20), dep_head char(5), CONSTRAINT unq_depname UNIQUE (dep_name) )
【例3.33】 在Seller表的Telephone字段建立唯一性约束。
ALTER TABLE Seller
ADD CONSTRAINT unq_telephone UNIQUE (Telephone)
注意 sales数据库的Seller表已有多行记录,这时在Seller表上创建唯一性约束,系统会检查表中已有数据,若现有数据在该Telephone字段上出现重复值,SQL Server会提示错误信息,并拒绝执行创建唯一性约束操作。
2.使用SQL Server Management Studio创建唯一性约束
【例3.34】 sales数据库中有Product表,在ProductName字段上创建唯一性约束。
在SQL Server Management Studio下创建唯一性约束的操作步骤为:
1)在SQL Server Management Studio的“对象资源管理器”中,选中需要添加唯一性约束的表Product,单击鼠标右键,在弹出的快捷菜单中选择“设计”命令,打开“表设计器”窗口。
2)在该窗口中,在需要在其上创建唯一性约束的字段上单击鼠标右键,在弹出的快捷菜单中选择“索引/键”命令,弹出“索引/键”对话框,如图3-43所示。
3)单击“添加”按钮添加新的主/唯一键或索引,如图3-44所示。
在(常规)选项中可以选择要创建的类型(唯一键、索引或列存储索引)、在哪一列上创建以及是否唯一等。例如,选择“唯一键”类型,在“列”的右边单击省略号按钮“...”,弹出“索引列”对话框,如图3-45所示。选择列名“ProductName”和排序规律ASC(升序)或DESC(降序),单击“确定”按钮,返回“索引/键”对话框。
在“索引/键”对话框的“标识”选项下的“(名称)”处可以为创建的唯一性约束指定名称,如输入unq_productname,如图3-46所示。
4)单击“关闭”按钮即可完成唯一性约束的创建。
5)如果要取消唯一性约束,则在该对话框的“选定的主/唯一键或索引”列表中选择对应的唯一键名称,单击“删除”按钮即可。