无涯教程-MySQL - 唯一索引

35 阅读2分钟

索引是一个进程,可以将无序列表列入有序列表,允许更快地检索记录。 它为索引列中出现的每个值创建一个条目 。它有助于最大化查询的效率,同时搜索MySQL中的表格。没有索引,无涯教程需要扫描整个表以查找相关信息。 MySQL索引的工作类似于书籍索引。

语法

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

CREATE UNIQUE INDEX index_name
ON table_name (index_column1, index_column2,...);

如果无涯教程在表中使用唯一的约束,MySQL会自动在幕后创建唯一的索引。以下语句介绍了在创建表时如何创建唯一的约束。

CREATE TABLE table_name(  
  col1 col_definition,  
  col2 col_definition,  
  ...  
  [CONSTRAINT constraint_name]  
  UNIQUE Key (column_name(s))  
);  

NOTE:建议在创建表时使用约束名称。如果无涯教程省略约束名称,MySQL会自动为此列生成名称。

唯一索引和null

MySQL中的空值认为类似于其他数据库的不同值。因此,可以在唯一索引列中存储多个空值。 MySQL的此函数有时会报告为一个错误,但这不是一个错误。

MySQL唯一指数示例

让无涯教程在一个例子的帮助下了解它。假设想在需要电子邮件列唯一的数据库应用程序中管理员工详细信息。执行以下语句,该语句创建一个表"employee_detail",具有唯一的约束:

CREATE TABLE Employee_Detail(  
    ID int AUTO_INCREMENT PRIMARY KEY,   
    Name varchar(45),   
    Email varchar(45),  
    Phone varchar(15),   
    City varchar(25),
    UNIQUE KEY unique_email (Email)
);

如果无涯教程执行以下语句,可以看到MySQL为Email列创建了唯一索引:

SHOW INDEXES FROM Employee_Detail;

在下面的屏幕中,可以看到电子邮件列被创建为唯一索引。

MySQL UNIQUE INDEX

接下来,将使用以下语句将记录插入表:

INSERT INTO Employee_Detail(ID, Name, Email, Phone, City)  
VALUES (1, Peter, peter@learnfk.com, 49562959223, Texas),  
(2, Suzi, suzi@learnfk.com, 70679834522, California),  
(3, Joseph, joseph@learnfk.com, 09896765374, Alaska);

以上语句成功执行,因为所有列都是唯一的。如果插入电子邮件 suzi@learnfk.com 的录制,无涯教程将获得重复的错误消息。

mysql> INSERT INTO Employee_Detail(ID, Name, Email, Phone, City) 
VALUES (2, Suzi, suzi@learnfk.com, 70679834522, Texas);  

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

MySQL UNIQUE INDEX

假设想要Name Phone 的employee_detail表也是唯一的。在这种情况下,将使用以下语句为这些列创建唯一索引:

CREATE UNIQUE INDEX index_name_phone
ON Employee_Detail (Name, Phone);

如果再次执行 show index 语句,无涯教程可以看到mysql为名称和电话列创建了一个唯一的索引 index_name_phone

MySQL UNIQUE INDEX

将此记录添加到表中产生错误。它是因为名称和电话的组合已经存在。

mysql> INSERT INTO Employee_Detail(ID, Name, Email, Phone, City) 
VALUES (4, Joseph, joseph@learnfk.com, 09896765374, Texas);  

调查此输出:

MySQL UNIQUE INDEX

参考链接

www.learnfk.com/mysql/mysql…