UNIQUE约束确保列或列组合值唯一,允许NULL但仅一个,可用于邮箱、用户名等字段;创建表时用UNIQUE关键字定义,如CREATE TABLE users (email VARCHAR(100) UNIQUE);支持多列组合唯一,如UNIQUE (user_id, role_id);已存在表可通过ALTER TABLE ADD UNIQUE (phone)添加;删除时需先查索引名SHOW INDEX FROM users,再DROP INDEX index_name;建议命名约束如CONSTRAINT uk_code UNIQUE (code),便于维护;一个表可有多个UNIQUE约束,与主键不同且不强制非空,合理使用可提升数据完整性。

在MySQL中,UNIQUE约束用于确保表中某列或多个列的组合值是唯一的,防止插入重复数据。它常用于邮箱、身份证号、用户名等需要唯一性的字段。
UNIQUE约束的作用
UNIQUE约束保证一列或多列中的数据不重复,允许有NULL值(但只能有一个NULL,若列不允许NULL,则不能插入多个空值)。与主键不同,一个表可以有多个UNIQUE约束。
创建表时添加UNIQUE约束
在建表语句中使用 UNIQUE 关键字定义唯一约束:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(100) UNIQUE,
username VARCHAR(50) UNIQUE
);
这样,email 和 username 都不能出现重复值。
也可以为多列组合设置唯一性:
CREATE TABLE user_roles (
user_id INT,
role_id INT,
UNIQUE (user_id, role_id)
);
表示同一用户不能重复分配同一个角色。
修改表结构添加UNIQUE约束
如果表已存在,可以通过 ALTER TABLE 添加唯一约束:
ALTER TABLE users ADD UNIQUE (phone);
为 phone 字段添加唯一限制。
为多个字段添加组合唯一约束:
ALTER TABLE orders ADD UNIQUE (order_date, customer_id);
删除UNIQUE约束
UNIQUE约束会自动生成一个索引,删除时需通过索引名操作。先查看索引名:
SHOW INDEX FROM users;
找到对应 UNIQUE 约束的索引名称(如 email),然后执行:
ALTER TABLE users DROP INDEX email;
即可移除该唯一约束。
命名UNIQUE约束(推荐做法)
为了方便管理,建议在添加约束时指定名称:
CREATE TABLE products (
id INT PRIMARY KEY,
code VARCHAR(20),
CONSTRAINT uk_code UNIQUE (code)
);
或者修改表时命名:
ALTER TABLE products ADD CONSTRAINT uk_username UNIQUE (username);
这样后续删除或查看时更清晰。
基本上就这些。合理使用UNIQUE约束能有效提升数据完整性,避免脏数据产生。注意设计时考虑是否允许NULL以及组合场景,避免误操作导致插入失败。










