MySQL 唯一键
在MySQL中,唯一键是一个字段或多个字段的组合,确保所有要存储到该列中的值都是唯一的。这意味着该列不能存储 重复值 。例如,在”student_info”表中的学生的电子邮件地址和学号,或在”Employee”表中的员工联系电话应该是唯一的。
MySQL允许我们在一个表中使用多个带有唯一约束的列。它可以接受一个 空值 ,但MySQL只允许每个列中有一个空值。它确保了列或一组列的 完整性 ,以便将不同的值存储到表中。
唯一键的需求
- 它有助于防止将相同的值存储到列中的两条记录。
- 它只存储不重复的值,以保持数据库的完整性和可靠性,以便以有组织的方式访问信息。
- 它还可以与外键一起工作,以保持表的唯一性。
- 它可以在表中包含空值。
语法
以下语法用于在 MySQL 中创建唯一键。
如果我们想在表中只创建一个唯一键列,使用以下语法:
CREATE TABLE table_name(
col1 datatype,
col2 datatype UNIQUE,
...
);
如果我们想在表中创建多个唯一键列,请使用以下语法:
CREATE TABLE table_name(
col1 col_definition,
col2 col_definition,
...
[CONSTRAINT constraint_name]
UNIQUE(column_name(s))
);
如果我们没有为唯一约束指定名称,MySQL会自动生成一个名称。因此,在创建表时建议使用约束名。
参数说明
以下表格详细解释了参数。
参数名称 | 描述 |
---|---|
table_name | 这是我们要创建的表的名称。 |
col1, col2 | 这是表中包含的列名。 |
constraint_name | 这是唯一键的名称。 |
column_name(s) | 这是将成为唯一键的列名。 |
唯一键示例
以下示例解释了在MySQL中如何使用唯一键。
这个语句创建了一个带有唯一约束的表” Student2 “:
CREATE TABLE Student2 (
Stud_ID int NOT NULL UNIQUE,
Name varchar(45),
Email varchar(45),
Age int,
City varchar(25)
);
接下来,执行以下列出的插入查询以了解它是如何工作的:
mysql> INSERT INTO Student2 (Stud_ID, Name, Email, Age, City)
VALUES (1, 'Peter', 'peter@javatpoint.com', 22, 'Texas'),
(2, 'Suzi', 'suzi@javatpoint.com', 24, 'California'),
(3, 'Joseph', 'joseph@javatpoint.com', 23, 'Alaska');
mysql> INSERT INTO Student2 (Stud_ID, Name, Email, Age, City)
VALUES (1, 'Stephen', 'stephen@javatpoint.com', 22, 'Texas');
输出
在下面的输出中,我们可以看到第一个 INSERT 查询 正确执行,但第二个语句失败并给出了一个错误,错误信息是:键值 Stud_ID 存在重复条目 ‘1’。
如果您想在多个列上定义唯一键,请使用以下查询:
CREATE TABLE Student3 (
Stud_ID int,
Roll_No int,
Name varchar(45) NOT NULL,
Email varchar(45),
Age int,
City varchar(25),
CONSTRAINT uc_rollno_email Unique(Roll_No, Email)
);
输出中,我们可以看到唯一键值包含两列,它们分别是 Roll_No(学号) 和 Email(电子邮件) 。
要验证这一点,请执行以下语句:
mysql> SHOW INDEX FROM Student3;
在这里,我们可以看到唯一约束已成功添加到表中:
删除唯一键
ALTER TABLE语句也允许我们从表中删除唯一键。使用以下语法来删除唯一键:
ALTER TABLE table_name DROP INDEX constraint_name;
在上述语法中, table_name 是我们要修改的表的名称,而 constraint_name 是要删除的唯一键的名称。
示例
此语句将永久地从表中删除 uc_rollno_email 约束。
mysql> ALTER TABLE Student3 DROP INDEX uc_rollno_email;
我们可以执行SHOW INDEX语句来验证。
使用ALTER TABLE语句创建唯一键
这个语句允许我们对现有的表进行修改。有时候我们想要给一个已存在的表的列添加一个唯一键;这时,我们就可以使用这个语句来为该列添加唯一键。
语法
下面是使用 ALTER TABLE语句 添加唯一键的语法:
ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE(column_list);
示例
该语句创建了一个名为 Students3 的表,该表在表定义中没有唯一键列。
CREATE TABLE Student3 (
Stud_ID int,
Roll_No int,
Name varchar(45) NOT NULL,
Email varchar(45),
Age int,
City varchar(25)
);
创建完表之后,如果我们想向该表添加唯一键,我们需要执行以下 ALTER TABLE 语句:
mysql> ALTER TABLE Student3 ADD CONSTRAINT uc_rollno_email UNIQUE(Roll_No, Email);
我们可以看到输出,其中两个语句都成功执行。
要验证这一点,请执行以下语句:
mysql> SHOW INDEX FROM Student3;
这里,我们可以看到唯一约束已经成功地添加到表中: