You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

复合主键的单个属性字段是否必须唯一?附SQL示例

复合主键的单个字段是否需要唯一?

嗨,这个问题其实挺常见的,咱们直接说结论:不需要。

复合主键的核心要求是多个字段的组合值必须唯一,以此来唯一标识表中的每一行,但单个字段本身完全可以重复——只要它们和主键里的其他字段组合起来不重复就行。

拿你给出的表结构举例:

CREATE TABLE example (
 a integer,
 b integer,
 c integer,
 PRIMARY KEY (a, c)
);

你完全可以插入以下几条数据,它们都是符合约束的:

INSERT INTO example (a, b, c) VALUES (1, 10, 2);
INSERT INTO example (a, b, c) VALUES (1, 20, 3);
INSERT INTO example (a, b, c) VALUES (2, 30, 2);

看这里,字段a重复出现了两次1,字段c也重复出现了两次2,但(a,c)的组合(1,2)、(1,3)、(2,2)都是独一无二的,完全满足复合主键的要求,数据库会正常接受这些插入操作。

如果你的业务需求里需要某个单个字段(比如a)必须唯一,那你得单独给这个字段添加UNIQUE约束,比如把表结构改成:

CREATE TABLE example (
 a integer UNIQUE,
 b integer,
 c integer,
 PRIMARY KEY (a, c)
);

但这属于额外的约束要求,和复合主键本身的规则无关。

内容的提问来源于stack exchange,提问作者Orestis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:26:27