程序员社区

MySQL系列教程 --- 80、MySQL 中的 唯一键(Unique Key)

MySQL 中的唯一键是单个字段或字段组合,可确保存储到列中的所有值都是唯一的。这意味着列不能存储重复值。例如,“student_info”表中学生的电子邮件地址和卷号或“Employee”表中员工的联系电话应该是唯一的。

MySQL 允许我们在一个表中使用多个具有 UNIQUE 约束的列。它可以接受值,但 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 中使用唯一键。

此语句创建一个带有 UNIQUE 约束的表“ 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 查询正确执行,但第二个语句失败并给出一个错误:Duplicate entry '1' for key Stud_ID。

file

如果要在多个列上定义唯一键,请使用如下查询:

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_NoEmail

file

要验证这一点,请执行以下语句:

mysql> SHOW INDEX FROM Student3;  

在这里,我们可以看到唯一约束已成功添加到表中:

file

删除唯一键

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);  

我们可以看到两个语句都成功执行的输出。

file

要验证这一点,请执行以下语句:

mysql> SHOW INDEX FROM Student3;  

在这里,我们可以看到唯一约束已成功添加到表中:

file

赞(0) 打赏
未经允许不得转载:IDEA激活码 » MySQL系列教程 --- 80、MySQL 中的 唯一键(Unique Key)

一个分享Java & Python知识的社区