联合主键(Composite Primary Key) 是指用两个或多个字段组合起来作为一张表的唯一标识,用来保证这些字段的组合在表中不重复。
下面从 概念 → 建表用法 → 常见场景 → 注意事项 给你讲清楚。
普通主键:
PRIMARY KEY (id)
联合主键:
PRIMARY KEY (user_id, role_id)
意思是:
✅ user_id 可以重复
✅ role_id 可以重复
❌ (user_id, role_id) 的组合不能重复
CREATE TABLE user_role (
user_id INT,
role_id INT,
created_at DATETIME,
PRIMARY KEY (user_id, role_id)
);
ALTER TABLE user_role
ADD PRIMARY KEY (user_id, role_id);
用户 ↔ 角色
user_id | role_id
1 | 1
1 | 2
2 | 1
防止重复授权。
PRIMARY KEY (order_id, product_id)
一个订单里不能有重复商品。
PRIMARY KEY (date, user_id)
| 对比项 | 联合主键 | 联合唯一索引 |
|---|---|---|
| 是否唯一 | ✅ | ✅ |
| 是否可为 NULL | ❌ | ✅ |
| 是否聚集索引(InnoDB) | ✅ | ❌ |
| 是否作为身份标识 | ✅ | ❌ |
UNIQUE KEY uk_user_role (user_id, role_id);
PRIMARY KEY (a, b)
✅ 能命中:a = ?
❌ 不能命中:b = ?(除非有额外索引)
字段不宜过多(一般 ≤ 3 个)
外键引用时必须完整引用
FOREIGN KEY (user_id, role_id)
REFERENCES user_role(user_id, role_id)
这时可用:
id BIGINT PRIMARY KEY AUTO_INCREMENT
再加唯一索引。
如果你用的是 MySQL / PostgreSQL / Oracle / Java / MyBatis,可以告诉我,我给你对应示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。