我如何定义SQL复合主键?我如何定义SQL复合主键?(How can I define a comp

2019-06-02 12:57发布

我如何可以定义包括在SQL两个字段的复合主键?

我使用PHP创建表和一切。 我想打一个表名voting与领域QuestionIDMemeberIDvote 。 和复合主键由字段QuestionIDMemberID

我应该怎么办呢?

Answer 1:

只是为了澄清:一个表最多只能有一个主键。 主键由一个或多个列(从该表中)的。 如果主键由两个或更多列的,它被称为复合主键 。 它定义如下:

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


Answer 2:

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


文章来源: How can I define a composite primary key in SQL?