24. 什么是唯一索引(Unique Index)?它与普通索引有什么区别?
大约 3 分钟
唯一索引(Unique Index) 是一种数据库索引,它要求索引列中的所有值必须是唯一的,即每一行的数据在索引列上都不能重复。唯一索引保证了数据库表中某个列(或多列的组合)的数据唯一性。唯一索引既可以在创建表时定义,也可以在表创建后添加。
唯一索引的特点
- 数据唯一性:唯一索引强制要求索引列中的值是唯一的。如果你尝试插入重复的数据行,数据库将会返回错误。
- 允许一个
NULL
值:在大多数数据库中(包括MySQL),唯一索引允许索引列中有一个NULL
值(注意:NULL
值不参与唯一性约束,因为NULL
被认为是未知的)。 - 加速查询:与普通索引类似,唯一索引也能够加速查询性能。查询引擎可以使用唯一索引快速定位数据,而不需要全表扫描。
唯一索引与普通索引的区别
普通索引(Non-Unique Index) 和 唯一索引 在许多方面是相似的,但它们有一个关键的区别:唯一性约束。
1. 数据唯一性
唯一索引:要求索引列中的每一个值都是唯一的。尝试插入重复的值会导致数据库抛出错误。
例如,在有唯一索引的情况下,如果尝试插入相同的电子邮件地址到用户表中,数据库会拒绝这个操作。
普通索引:不对数据的唯一性做任何强制要求。索引列中的值可以重复。
2. 用途
- 唯一索引:通常用于需要保证数据唯一性的场景,如电子邮件、用户名、社保号码等。
- 普通索引:通常用于加速查询,而不关心数据的唯一性,如商品分类、状态标记等。
3. 使用场景
唯一索引:确保某些列(或列的组合)中的值不重复。这不仅能加速查询,还能保持数据的完整性。
示例:电子邮件地址、用户名、身份证号码等。
普通索引:主要用于加速查询,但不要求数据唯一性。
示例:订单状态、产品分类等。
如何在MySQL中创建唯一索引
MySQL支持多种方式来创建唯一索引,可以在创建表时定义,也可以在表创建后添加。
1. 在创建表时定义唯一索引
CREATE TABLE users (
user_id INT AUTO_INCREMENT,
username VARCHAR(100),
email VARCHAR(100),
PRIMARY KEY (user_id),
UNIQUE INDEX idx_unique_email (email) -- 定义唯一索引
);
在这个例子中,email
列上创建了一个唯一索引 idx_unique_email
,确保用户表中的电子邮件地址不会重复。
2. 在现有表上添加唯一索引
ALTER TABLE users ADD UNIQUE INDEX idx_unique_username (username);
这个语句在 users
表的 username
列上添加了一个唯一索引 idx_unique_username
,确保用户名的唯一性。
如何在MySQL中删除唯一索引
可以使用 DROP INDEX
语句来删除唯一索引。
DROP INDEX idx_unique_email ON users;
这个语句删除了 users
表上的 idx_unique_email
唯一索引。
总结
- 唯一索引 是一种索引类型,保证索引列中的每个值都是唯一的。它与普通索引的主要区别在于数据的唯一性约束。
- 普通索引 不要求列中的数据唯一,主要用于加速查询。
- 创建和删除:可以在表创建时定义唯一索引,或者在表创建后添加。也可以通过
DROP INDEX
语句删除不再需要的唯一索引。
合理使用唯一索引不仅可以加速查询,还可以确保数据库中的数据一致性和完整性。