SQL Unique Key 怎么创建和使用?

文章导读
上一个 测验 下一个
📋 目录
  1. 多个 Unique Keys
  2. 现有列上的 Unique Key
  3. 删除 SQL Unique Key
A A

SQL - 唯一键

目录
  • SQL 唯一键
  • 创建 SQL 唯一键
  • 多个唯一键
  • 现有列上的唯一键
  • 删除 SQL 唯一键


上一个
测验
下一个 多个 Unique Keys

我们可以在 SQL 表的一个或多个列上创建 一个或多个 Unique Keys。

语法

以下是在表中多个列上创建 unique key 约束的语法 −

CREATE TABLE table_name(
   column1 datatype UNIQUE KEY,
   column2 datatype UNIQUE KEY,
   .....
   .....
   columnN datatype
);

示例

假设我们使用 CREATE TABLE 语句在 SQL 数据库中创建了一个名为 CUSTOMERS 的表。在列 ID 和 NAME 上使用 UNIQUE 关键字定义了 Unique key,如下所示 −

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

输出

以上 SQL 语句的输出如下 −

Query OK, 0 rows affected (0.03 sec)

验证

由于我们在名为 ID 和 NAME 的列上创建了 UNIQUE 约束,因此不能向其中插入重复值。让我们通过以下 INSERT 语句向 BUYERS 表插入重复记录来验证 −

INSERT INTO BUYERS VALUES 
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(1, 'Rajesh', 25, 'Delhi', 1500.00 );

会显示以下错误 −

ERROR 1062 (23000): Duplicate entry '1' for key 'customers.ID'

同样,如果您尝试插入另一条具有重复 NAME 列值的记录,如下 −

INSERT INTO BUYERS VALUES (2, 'Ramesh', 36, 'Chennai', 1700.00 );

会生成以下错误 −

ERROR 1062 (23000): Duplicate entry 'Ramesh' for key 'buyers.NAME'

现有列上的 Unique Key

到目前为止,我们只看到了在创建新表时如何在列上定义 Unique Key。但是,我们也可以在表的现有列上添加 unique key。这是使用 ALTER TABLE... ADD CONSTRAINT 语句完成的。

语法

以下是在表的现有列上创建 unique 约束的语法 −

ALTER TABLE table_name ADD CONSTRAINT 
UNIQUE_KEY_NAME UNIQUE (column_name);

注意 − 此处的 UNIQUE_KEY_NAME 只是 UNIQUE KEY 的名称。可以选择指定,用于从表中的列删除约束。

示例

在本例中,我们在现有 CUSTOMERS 表的 ADDRESS 列上添加 Unique Key −

ALTER TABLE CUSTOMERS ADD CONSTRAINT 
UNIQUE_ADDRESS UNIQUE(ADDRESS);

输出

以上语句的输出如下 −

Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

删除 SQL Unique Key

如果您已经在列上创建了 unique key,当不再需要时,可以随时删除它。要从表的列中删除 Unique Key,需要使用 ALTER TABLE 语句。

语法

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

ALTER TABLE table_name DROP CONSTRAINT UNIQUE_KEY_NAME;

示例

考虑上面创建的 CUSTOMERS 表,我们在名为 ID、NAME 和 ADDRESS 的三个列上创建了 UNIQUE 约束;通过执行以下 SQL 查询从 ADDRESS 列删除 UNIQUE 约束 −

ALTER TABLE CUSTOMERS DROP CONSTRAINT UNIQUE_ADDRESS;

输出

以上语句的输出如下 −

Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

验证

现在,让我们插入两条 ADDRESS 列的重复记录 −

INSERT INTO CUSTOMERS VALUES 
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Ahmedabad', 1500.00 );

如果您验证表的内容,可以观察到两条记录具有相同的 ADDRESS,如下所示 −

ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Ahmedabad 1500.00