我怎样才能在SQL中定义一个复合主键?

我怎样才能定义一个由SQL中的两个字段组成的复合主键?

我正在使用PHP来创build表和一切。 我想要使​​用QuestionIDMemeberIDvote来进行表名voting 。 组合主键由字段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)中select哪一个最适合您如何使用表格。

如有必要,在另一个上添加一个索引:

 CREATE UNIQUE INDEX idx1 ON voting (MemberID, QuestionID); 
 CREATE TABLE `voting` ( `QuestionID` int(10) unsigned NOT NULL, `MemberId` int(10) unsigned NOT NULL, `vote` int(10) unsigned NOT NULL, PRIMARY KEY (`QuestionID`,`MemberId`) );