Mysql 简明教程

MySQL - Unique Key

Unique Key 在 MySQL 中,如果应用到数据库表格的某个域上,则不允许在该列中插入重复值,即它用于唯一标识表格中的一条记录。

通常,任何关系数据库都包含存储在多个表格中的大量信息,并且每个表格都保存着大量记录。当我们处理如此庞大的数据量时,就有可能发生冗余(重复记录)。SQL 键是处理此问题的方法。

这个唯一键充当主键约束的替代;因为唯一键和主键都确保了数据库表格中的列的唯一性。

Creating MySQL Unique Key

我们可以使用 UNIQUE 关键字在 MySQL 表格列上创建唯一键,并且它具有以下特征:

  1. 即使唯一键与表格中的主键类似,但它可以接受单个 NULL 值,这与主键不同。

  2. 它不能有重复的值。

  3. 它还可用作另一个表的外键。

  4. 一个表可以有多个唯一列。

Syntax

以下是在表中的列上创建唯一键约束的语法:

CREATE TABLE table_name(
   column_name1 datatype UNIQUE,
   column_name2 datatype,
   ...
);

如您所观察到的,我们只需在使用 CREATE TABLE 语句创建表格时,在所需列的名称后面指定关键字 UNIQUE 即可。

Example

在这个示例中,让我们创建一个名为 CUSTOMERS 的表格,并在其中一个字段 ADDRESS 上定义唯一键。查看以下查询:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25) UNIQUE,
   SALARY DECIMAL (18, 2)
);

Output

显示的表结构将在 ADDRESS 列上包含一个 UNI 索引,如下所示 −

您可以在表格定义中看到,唯一键是在 ADDRESS 字段上创建的。

Creating Multiple Unique Keys

我们可以在单个 MySQL 表格中的列上创建一个或多个唯一键约束。当在多个字段中应用此约束时,就不能在这些字段中插入重复值。

Syntax

以下是在表的多个列上创建唯一键约束的语法:

CREATE TABLE table_name(column_name1 UNIQUE, column_name2 UNIQUE,...)

Example

假设我们在 MySQL 数据库中使用 CREATE TABLE 语句创建了另一个名为 CUSTOMERS 的表格。

这里我们使用 UNIQUE 关键字在 NAME 和 ADDRESS 列上创建唯一约束,如下所示:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL UNIQUE,
   AGE INT NOT NULL,
   ADDRESS CHAR (25) UNIQUE,
   SALARY DECIMAL (18, 2)
);

Output

显示的表结构将在 ADDRESS 列上包含一个 UNI 索引,如下所示 −

Creating Unique Key on Existing Columns

我们可以使用 ALTER TABLE…​ ADD CONSTRAINT 语句,针对表格现有列添加唯一键约束。

Syntax

以下是针对表格现有列创建唯一键的语法:

ALTER TABLE table_name
ADD CONSTRAINT unique_key_name
UNIQUE (column_name);

Note - 其中 UNIQUE_KEY_NAME 是唯一键的名称。在创建唯一键时,可以不指定名称。此名称用于删除表格中某列的约束。

Example

使用 ALTER TABLE 语句,可以针对自定义表格中之前的任何现有列添加唯一约束。在以下的示例中,我们对 NAME 列应用唯一约束,如下所示:

ALTER TABLE CUSTOMERS
ADD CONSTRAINT UNIQUE_NAME
UNIQUE (NAME);

Output

显示的表结构将在 ADDRESS 列上包含一个 UNI 索引,如下所示 −

Dropping MySQL Unique Key

如果已有列上的唯一约束,可以随时删除不再需要的约束。要删除表格中某列的唯一约束,需要再次使用 ALTER TABLE 语句。

Syntax

以下是用于从表的列中删除 UNIQUE 约束的 SQL 查询:

ALTER TABLE TABLE_NAME DROP CONSTRAINT UNIQUE_KEY_NAME;

Example

在此示例中,我们将使用以下 MySQL 查询,删除表格 CUSTOMERS 中名为 UNIQUE_NAME 的列中 NAME 的约束:

ALTER TABLE CUSTOMERS DROP CONSTRAINT UNIQUE_NAME;

Output

仅显示的表格结构中包含了 ADDRESS 列的 UNI 索引,表明已删除了 NAME 列的索引。

Creating Unique Key Using Client Program

除了使用列上的键通过 MySQL 查询唯一标识,我们还可以通过使用客户端程序,对栏位应用唯一键约束。

Syntax

Example

以下是这些程序 −