SQL - 唯一键



SQL 唯一键

SQL 唯一键(或唯一约束)不允许表中某列出现重复值。它防止两条记录在同一列中具有相同的值。

唯一键只是主键的替代方案;因为唯一约束和主键约束都确保表中某列的唯一性。

假设我们有一个名为 CUSTOMERS 的表,用于存储银行中的客户记录,如果其中一列名为 MOBILE_NO,那么我们可以在此列上创建一个唯一约束,以防止输入具有相同手机号码的多个记录。

唯一键的特性

以下是 SQL 数据库中唯一键的一些关键特性的列表:

  • 唯一键类似于表中的主键,但它可以接受 NULL 值,而主键则不能。

  • 它只接受一个 NULL 值。

  • 它不能有重复值。

  • 它也可以用作另一个表中的外键。

  • 一个表可以有多个唯一列。

创建 SQL 唯一键

您可以使用 SQL 中的 UNIQUE 关键字在数据库表上创建唯一键。创建数据库表时,请在列(需要在此列上定义此键)旁边指定此 SQL 关键字。

语法

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

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

示例

使用以下 SQL 查询,我们正在创建一个名为 CUSTOMERS 的表,其中包含五个字段 ID、NAME、AGE、ADDRESS 和 SALARY。在这里,我们正在 ID 列上创建一个唯一键。

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

输出

以下是上述 SQL 语句的输出:

Query OK, 0 rows affected (0.03 sec)

验证

由于我们在名为 ID 的列上创建了一个唯一约束,因此我们不能在其中插入重复值。让我们通过将以下具有重复 ID 值的记录插入到 CUSTOMERS 表中来进行验证:

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

执行后,将显示以下错误,证明 ID 列上确实定义了唯一约束:

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

多个唯一键

我们可以在 SQL 表中的一列或多列上创建一个或多个唯一键。

语法

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

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

示例

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

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 的列上创建了一个唯一约束,因此我们不能在其中插入重复值。让我们通过使用以下 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'

现有列上的唯一键

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

语法

以下是创建表现有列上唯一约束的语法:

ALTER TABLE table_name ADD CONSTRAINT 
UNIQUE_KEY_NAME UNIQUE (column_name);

注意 - 这里的 UNIQUE_KEY_NAME 只是唯一键的名称。指定它是可选的,用于从表中的列删除约束。

示例

在此示例中,我们在现有 CUSTOMERS 表的 ADDRESS 列上添加了一个唯一键:

ALTER TABLE CUSTOMERS ADD CONSTRAINT 
UNIQUE_ADDRESS UNIQUE(ADDRESS);

输出

以下是上述语句的输出:

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

删除 SQL 唯一键

如果您已经在列上创建了一个唯一键,则可以在不需要时将其删除。要从表的列中删除唯一键,您需要使用 ALTER TABLE 语句。

语法

以下是删除表列中唯一约束的 SQL 查询:

ALTER TABLE table_name DROP CONSTRAINT UNIQUE_KEY_NAME;

示例

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

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 姓名 年龄 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Ahmedabad 1500.00
广告