SQL 唯一键UNIQUE

SQL 唯一键UNIQUE

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列确实定义了UNIQUE约束:

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的表。 使用UNIQUE关键字,我们对ID和NAME列定义了唯一键,如下所示 –

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 );
INSERT INTO BUYERS VALUES (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只是UNIQUE KEY的名称。在表中指定该名称是可选的,并且用于从列中删除约束。

示例

在此示例中,我们在现有的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 );

如果您验证表的内容,您会发现两条记录的地址相同,如下所示 –

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程