MySQL 唯一索引

2025年3月17日 | 阅读 3 分钟

索引是一种将无序列表转换为有序列表的过程,可以更快地检索记录。它为索引列中出现的每个值创建一个条目。它有助于最大化查询效率,同时在 MySQL 中搜索表。没有索引,我们需要扫描整个表来查找相关信息。MySQL 索引的工作方式类似于书籍索引。

通常,我们使用主键约束来强制一个或多个列的唯一值。但是,每个表只能使用一个主键。因此,如果我们想创建多个具有唯一值的列集,则无法使用主键约束。

MySQL 允许另一种称为唯一索引的约束,以强制一个或多个列的值唯一。我们可以在单个表中创建多个唯一索引,这与主键约束不同。

语法

以下是用于在 MySQL 表中创建唯一索引的通用语法

MySQL 允许另一种强制在一个或多个列中具有唯一值的方法,即使用 UNIQUE Key 语句。我们可以阅读有关 唯一键 的更多信息。

如果我们使用 UNIQUE 约束在表中,MySQL 会在后台自动创建一个 UNIQUE 索引。下面的语句说明了在创建表时如何创建唯一约束。

注意:建议在创建表时使用约束名称。如果我们省略约束名称,MySQL 会自动为此列生成一个名称。

MySQL 唯一索引和 NULL

MySQL 中的 NULL 值被视为与其他数据库不同的值。因此,我们可以在唯一索引列中存储多个 NULL 值。MySQL 的此功能有时被报告为错误,但它实际上不是错误。

MySQL 唯一索引示例

让我们通过一个例子来理解它。假设我们想在一个数据库应用程序中管理员工详细信息,其中我们需要电子邮件列是唯一的。执行以下语句,该语句创建一个带有 UNIQUE 约束的表"Employee_Detail"

如果我们执行下面的语句,我们可以看到 MySQL 为 Employee_Detail 表的 Email 列创建了一个 UNIQUE 索引

在下面的屏幕截图中,我们可以看到 Email 列被创建为唯一索引。

MySQL UNIQUE INDEX

接下来,我们将使用以下语句向表中插入记录

上面的语句成功执行,因为所有列都是唯一的。如果我们插入一条电子邮件为 [email protected] 的记录,我们将收到重复错误消息。

下面的输出更清楚地解释了所有上述步骤

MySQL UNIQUE INDEX

假设我们希望 Employee_Detail 表的NamePhone 也唯一。在这种情况下,我们将使用以下语句为这些列创建 UNIQUE 索引

如果我们再次执行 SHOW INDEX 语句,我们可以看到 MySQL 为 name 和 phone 列创建了一个 UNIQUE 索引 index_name_phone

MySQL UNIQUE INDEX

将此记录添加到表中会导致错误。这是因为姓名和电话的组合已存在。

查看此输出

MySQL UNIQUE INDEX
下一主题MySQL 集群索引