唯一索引是数据库中用于确保列或列组合数据唯一性的索引,允许null值且可创建多个。1. 它防止重复数据插入,如注册系统中避免邮箱重复;2. 提升查询性能,加速查找操作;3. 支持联合唯一约束,如用户与商品的唯一关联;4. 插入冲突时会报错,需程序处理异常;5. 不同数据库对null值处理不同,如postgresql允许多个null;6. 创建过多会影响写入性能,应合理使用;7. 命名应清晰有意义,便于维护。

在 SQL 中,CREATE UNIQUE INDEX 是用来确保某列或多列组合的数据在整个表中保持唯一性的一种方法。它不仅能提升查询效率,还能防止重复数据的插入。

什么是唯一索引?
唯一索引(Unique Index)是一种数据库索引,它强制要求索引列中的所有值都必须是唯一的。换句话说,不能有两个行在该列上有相同的值。
这和主键(Primary Key)有点像,但又不完全一样。主键也具有唯一性约束,并且不允许 NULL 值;而唯一索引允许 NULL 值(具体行为可能因数据库系统而异),而且一张表可以有多个唯一索引。

例如:
CREATE UNIQUE INDEX idx_email ON users(email);
这条语句会在 users 表的 email 列上创建一个唯一索引,保证每个用户的邮箱地址都是唯一的。

如何创建唯一索引?
使用 CREATE UNIQUE INDEX 语句是最常见的方法之一。语法如下:
CREATE UNIQUE INDEX index_name ON table_name (column1, column2, ...);
- index_name:你要给这个索引起的名字。
- table_name:要创建索引的表名。
- column1, column2…:参与索引的一列或多列。
举个例子,如果你有一个用户表 users,你希望用户名和邮箱的组合是唯一的,可以这样写:
CREATE UNIQUE INDEX idx_username_email ON users(username, email);
这样做的结果是,两个用户不能同时拥有相同的用户名和邮箱。
小贴士:有些数据库如 MySQL 还支持在建表时直接定义唯一索引,比如在 CREATE TABLE 中使用 UNIQUE 关键字。
唯一索引有什么实际用途?
-
防止重复数据
- 比如注册系统中,避免同一邮箱多次注册。
- 用户名、身份证号等字段需要唯一性保障。
-
提升查询性能
- 唯一索引也是索引,可以加速基于这些列的查找操作。
-
作为约束机制
- 相比应用层逻辑去判断是否重复,数据库级别的唯一索引更可靠,不容易出错。
-
支持联合唯一约束
- 比如订单表中,可以设置
(user_id, product_id)联合唯一,表示一个用户对某个商品只能下单一次。
- 比如订单表中,可以设置
使用唯一索引需要注意什么?
插入或更新冲突会报错 如果尝试插入或更新一条会导致唯一列出现重复值的数据,数据库会抛出错误。你需要在程序中处理这种异常情况。
允许 NULL 值的情况 在某些数据库中,比如 PostgreSQL,唯一索引允许多个
NULL值存在(因为NULL不等于任何值,包括它自己)。但在其他系统中可能会有不同的处理方式,这点要注意。不要滥用 创建太多索引会影响写入性能(INSERT、UPDATE、DELETE),所以只在真正需要的地方使用唯一索引。
命名规范 给索引起个清晰有意义的名字,方便后期维护和排查问题。比如
idx_users_email比idx123更直观。
基本上就这些。用好 CREATE UNIQUE INDEX 可以帮助你在数据层面更好地控制数据一致性和完整性,既实用又高效。










