我如何可以定义包括在SQL两个字段的复合主键?
我使用PHP创建表和一切。 我想打一个表名voting
与领域QuestionID
, MemeberID
和vote
。 和复合主键由字段QuestionID
和MemberID
。
我应该怎么办呢?
我如何可以定义包括在SQL两个字段的复合主键?
我使用PHP创建表和一切。 我想打一个表名voting
与领域QuestionID
, MemeberID
和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);
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`)
);