唯一约束(UNIQUE Constraint)是数据库中用来保障某一列或多列的数据不出现重复值的一种机制。下面从原理、作用和常见注意点说明它如何保障数据不重复。
当你在一个或多个字段上创建 UNIQUE 约束 时,数据库会自动在这些字段上创建一个 唯一索引:
本质:
唯一性 = 唯一索引 + 写入前检查
当你执行:
INSERT INTO user(email) VALUES ('a@test.com');
数据库会:
email 的唯一索引a@test.comCREATE TABLE user (
id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE
);
✅ 效果:
email 在整个表中不能重复NULL 通常允许多个(大多数数据库)CREATE TABLE score (
student_id INT,
course_id INT,
score INT,
UNIQUE (student_id, course_id)
);
✅ 表示:
(1, 101) 不能重复,但 (1, 102) 可以| 方式 | 是否防止重复 | 说明 |
|---|---|---|
| UNIQUE 约束 | ✅ | 数据库层面强制 |
| 应用层判断 | ❌ | 并发时容易失效 |
| 普通索引 | ❌ | 不限制重复 |
| 主键 | ✅ | 本质是特殊的 UNIQUE |
✅ 推荐:数据唯一性必须由数据库保证
大多数数据库:
NULL 不等于任何值NULLINSERT INTO user(email) VALUES (NULL);
INSERT INTO user(email) VALUES (NULL); -- 通常允许
如需禁止多个 NULL:
CHECK 约束NOT NULL即使多个请求同时插入相同数据:
✅ 唯一约束天然防并发重复
唯一约束通过数据库层的唯一索引,在写入前强制检查,从根本杜绝重复数据的产生,是最可靠的数据唯一性保障方式。
如果你愿意,我也可以结合 MySQL / PostgreSQL / Oracle 的具体行为给你更详细的说明。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。