如何在 SQL 中定义由两个字段组成的复合主键?
我想创建一个表名voting
,其中包含字段QuestionID
、MemberID
和vote
。复合主键由字段 QuestionID
和 MemberID
组成。
我应该怎么做?
最佳答案
仅供说明:一张表最多可以有一个主键。主键由一列或多列(来自该表)组成。如果主键由两列或多列组成,则称为复合主键。其定义如下:
CREATE TABLE voting (
QuestionID NUMERIC,
MemberID NUMERIC,
PRIMARY KEY (QuestionID, MemberID)
);
该对 (QuestionID,MemberID) 对于表来说必须是唯一的,并且两个值都不能为 NULL。如果您执行这样的查询:
SELECT * FROM voting WHERE QuestionID = 7
它将使用主键的索引。但是,如果您这样做:
SELECT * FROM voting WHERE MemberID = 7
不会,因为使用复合索引需要使用“左边”的所有键。如果索引位于字段 (A、B、C) 上,而您的条件位于 B 和 C 上,则该索引对于您的查询没有用处。因此,请从 (QuestionID,MemberID) 和 (MemberID,QuestionID) 中选择最适合您使用表格方式的选项。
如有必要,请在另一个上添加索引:
CREATE UNIQUE INDEX idx1 ON voting (MemberID, QuestionID);
关于sql - 如何在 SQL 中定义复合主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1110349/