Zee*_*ang 98 sql primary-key composite-primary-key
如何在SQL中定义由两个字段组成的复合主键?
我正在使用PHP来创建表和一切.我想打一个表名voting与领域QuestionID,MemeberID和vote.Composite主键由字段QuestionID和MemberID.
我该怎么做?
cle*_*tus 204
只是为了澄清:一个表最多只能有一个主键.主键由一个或多个列组成(来自该表).如果主键由两列或更多列组成,则称为复合主键.它的定义如下:
CREATE TABLE voting (
QuestionID NUMERIC,
MemberID NUMERIC,
PRIMARY KEY (QuestionID, MemberID)
);
Run Code Online (Sandbox Code Playgroud)
然后,对(QuestionID,MemberID)对于表必须是唯一的,并且这两个值都不能为NULL.如果您执行以下查询:
SELECT * FROM voting WHERE QuestionID = 7
Run Code Online (Sandbox Code Playgroud)
它将使用主键的索引.但是,如果你这样做:
SELECT * FROM voting WHERE MemberID = 7
Run Code Online (Sandbox Code Playgroud)
它不会因为使用复合索引而需要使用"left"中的所有键.如果索引在字段(A,B,C)上,并且您的条件在B和C上,则该索引对该查询没用.因此,选择(QuestionID,MemberID)和(MemberID,QuestionID)最适合您使用该表的方式.
如有必要,在另一个上添加索引:
CREATE UNIQUE INDEX idx1 ON voting (MemberID, QuestionID);
Run Code Online (Sandbox Code Playgroud)
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`)
);
Run Code Online (Sandbox Code Playgroud)