如何在SQL中定义复合主键?
问题描述:
如何定义由SQL中的两个字段组成的复合主键?如何在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);
+3
很好的答案。为了澄清,QuestionID和MemberID不是单独的主键,而是它们的组合形成了唯一的对/元组。 – Peter 2009-07-10 15:47:30
答
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`)
);
“而QuestionID和MEMBERID将是主键。” (QuestionID,MemberID)将是(复合)主*键*。只有一个键,它由两列组成。 – Draemon 2009-07-10 16:22:08