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 |