多个 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 |