如何创建具备双列主键且两列值均唯一的SQL表?
创建满足特定约束的SQL表
需求说明
- 表包含A、B两列
- 主键为组合键(A, B)
- 列A的所有值唯一(即
COUNT(A) = COUNT(DISTINCT A)) - 列B的所有值同样唯一
正确的表创建语句
要同时满足组合主键、A列唯一、B列唯一的约束,需给A、B列分别添加唯一约束,同时显式声明组合主键:
CREATE TABLE IF NOT EXISTS myTable( A VARCHAR(32) NOT NULL UNIQUE, B VARCHAR(32) NOT NULL UNIQUE, PRIMARY KEY (A, B) );
插入示例及结果
INSERT INTO myTable VALUES ('A1', 'B1'); -- 允许插入(A、B均未重复) INSERT INTO myTable VALUES ('A1', 'B2'); -- 禁止插入(A列值'A1'已存在) INSERT INTO myTable VALUES ('A2', 'B2'); -- 允许插入(A、B均未重复) INSERT INTO myTable VALUES ('A3', 'B3'); -- 允许插入(A、B均未重复) INSERT INTO myTable VALUES ('A4', 'B3'); -- 禁止插入(B列值'B3'已存在) INSERT INTO myTable VALUES ('A4', 'B4'); -- 允许插入(A、B均未重复) INSERT INTO myTable VALUES ('A5', 'B6'); -- 允许插入(A、B均未重复)
注:原示例中的创建语句存在错误(将A列单独设为主键,不符合组合主键要求),上述语句已修正,确保所有约束同时生效。
内容的提问来源于stack exchange,提问作者Ohumeronen
相关产品推荐
相关产品推荐

