📜  MySQL唯一键

📅  最后修改于: 2020-11-18 03:23:52             🧑  作者: Mango

MySQL唯一键

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将自动为此列生成一个名称。因此,建议在创建表时使用约束名称。

参数说明

下表详细说明了参数。

Parameter Name Descriptions
table_name It is the name of the table that we are going to create.
col1, col2 It is the column names that contain in the table.
constraint_name It is the name of the unique key.
column_name(s) It is the column name(s) that is going to be a unique key.

唯一键示例

以下示例说明了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查询正确执行,但是第二条语句失败并给出错误消息:密钥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;

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