如何在SQL中定义由两个字段组成的复合主键?

我正在使用PHP创建表和所有内容。我想使用votingQuestionIDMemeberID字段创建表名称vote。复合主键由QuestionIDMemberID字段组成。

我应该怎么做?

最佳答案

为了澄清起见:一张表最多可以有一个主键。一个主键由一个或多个列组成(来自该表)。如果主键包含两列或更多列,则称为复合主键。定义如下:

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);

10-08 13:05