复合主键(Composite Primary Key,也叫联合主键)是指由多个字段组合来唯一标识一行记录的主键。下面从设计原则、常见场景、示例、优缺点几个方面讲清楚。
✅ 适合以下场景:
❌ 不适合:
INT、BIGINT、CHAR(固定)TEXT、VARCHAR(大)、JSON复合索引遵循最左前缀原则
例如:
PRIMARY KEY (user_id, role_id)
✅ 能命中索引的查询:
user_id = ?user_id = ? AND role_id = ?❌ 不能命中:
role_id = ?CREATE TABLE user_role (
user_id BIGINT,
role_id BIGINT,
created_at DATETIME,
PRIMARY KEY (user_id, role_id)
);
✔ 含义:一个用户可以有多个角色
✔ 天然唯一
CREATE TABLE order_item (
order_id BIGINT,
product_id BIGINT,
quantity INT,
PRIMARY KEY (order_id, product_id)
);
✔ 一个订单中一种商品只能出现一次
PRIMARY KEY (device_id, event_time)
⚠ 注意:时间字段做主键时,要确保精度足够(避免重复)
PRIMARY KEY (user_id, role_id)
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT,
role_id BIGINT,
UNIQUE (user_id, role_id)
✅ 优点:
❌ 缺点:
✅ 表是“关系型 / 明细型” → 可考虑复合主键
✅ 表是“核心业务实体” → 用单字段主键更稳
✅ 不确定 → 用代理主键 + 唯一索引
如果你有具体业务表结构,我可以直接帮你设计复合主键方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。