在数据库中,唯一约束(UNIQUE Constraint)的核心作用就是防止表中某一列或某几列的组合出现重复值。下面从原理、使用方式、以及注意事项几个方面说明它如何“避免重复”。
写入时检查
INSERT 或 UPDATE 时,数据库会自动检查:
Duplicate entry)建立在存储层
CREATE TABLE user (
id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE
);
✅ 效果:email 不能重复
CREATE TABLE member (
user_id INT,
group_id INT,
UNIQUE (user_id, group_id)
);
✅ 效果:
(1,2) 可以(1,2) 再插入就报错(1,3) 可以ALTER TABLE user
ADD UNIQUE (phone);
⚠️ 如果表中已有重复数据,会添加失败
在 大多数数据库(如 MySQL、PostgreSQL) 中:
UNIQUE 允许多个 NULLNULL 表示“未知”,不等于任何值NULL, NULL, NULL ✅ 不冲突
1, 1 ❌ 冲突
如果你不允许 NULL 重复,需要:
NOT NULL + UNIQUEemail VARCHAR(100) NOT NULL UNIQUE
| 方式 | 是否可靠 | 说明 |
|---|---|---|
| 应用层判断 | ❌ 不可靠 | 并发时仍可能重复 |
| 数据库唯一约束 | ✅ 可靠 | 原子性保证 |
✅ 正确做法:
唯一约束是“最后防线”,应用层可提前校验提升体验
-- 先查重复
SELECT email, COUNT(*)
FROM user
GROUP BY email
HAVING COUNT(*) > 1;
处理完后再加约束
INSERT IGNORE INTO user(email) VALUES ('a@x.com');
或
INSERT ... ON DUPLICATE KEY UPDATE ...
唯一约束通过数据库层的自动校验和唯一索引,从根本上阻止重复数据的写入,是防止重复的最可靠方式。
如果你用的是 MySQL / PostgreSQL / Oracle,我也可以给你具体示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。