4.6 唯一约束

唯一性约束(Unique Constraint)要求添加该约束的列字段的值唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。本节介绍唯一约束的使用。

4.6.1 创建唯一约束

唯一约束要求字段中的数据不能有重复。由于同时存在两个空值(NULL)也相当于是重复,因此唯一约束字段通常同时定义非空约束。

唯一约束没有修改的操作,一个字段只能有着唯一或不唯一这两种可能,因此对唯一性约束的操作,只有唯一约束的添加和删除。

唯一约束与非空约束的操作步骤一样,因此在MySQL Workbench工具下进行的唯一约束操作(创建、添加、删除)可参考非空约束的操作步骤,这里不再详细说明。

通过SQL语句创建表的时候可以直接创建唯一约束,有两种方式:在字段的数据类型后面使用UNIQUE关键字;在所有字段定义之后,使用如下语句:

[CONSTRAINT <约束名>] UNIQUE(<字段名>)

【范例12】

创建fruitshop.student表,定义其name字段为唯一约束字段,代码如下。

CREATE TABLE 'fruitshop'.'student' (
      'id' INT NOT NULL,
      'name' VARCHAR(45) NULL,
      'sex' VARCHAR(4) NULL,
      'age' INT NULL,
      PRIMARY KEY ('id'),
      UNIQUE INDEX 'name_UNIQUE' ('name' ASC));

上述代码中,最后一行代码创建了一个唯一约束的索引,名称是name_UNIQUE。对于外键约束和唯一约束来说,创建约束的同时将默认创建相关字段的索引,索引的相关知识将在第7章中介绍。

4.6.2 修改唯一约束

唯一约束的修改包括对没有唯一约束的字段添加约束和取消字段的唯一约束。添加唯一约束需要为约束定义一个索引名称,并在取消约束时根据该名称删除该索引。设置和取消唯一约束的语法如下。

设置唯一约束语法如下:

ADD UNIQUE INDEX 约束名(字段名 ASC)

取消唯一约束语法如下:

DROP INDEX 约束名

【范例13】

为fruitshop.student表的id字段添加唯一约束,名称为id_UNIQUE,代码如下。

ALTER TABLE 'fruitshop'.'student'
    ADD UNIQUE INDEX 'id_UNIQUE' ('id' ASC);

【范例14】

取消fruitshop.student表的name字段的唯一约束,由范例12可以看出该约束的名称是name_UNIQUE,取消约束代码如下。

ALTER TABLE 'fruitshop'.'student'
    DROP INDEX 'name_UNIQUE' ;