如何在SQL中定义由两个字段组成的复合主键?
我正在使用PHP创建表和所有内容.我想用字段QuestionID
、MemeberID
和vote
创建一个表名voting
.复合主键由字段QuestionID
和MemberID
组成.
我该怎么做?
如何在SQL中定义由两个字段组成的复合主键?
我正在使用PHP创建表和所有内容.我想用字段QuestionID
、MemeberID
和vote
创建一个表名voting
.复合主键由字段QuestionID
和MemberID
组成.
我该怎么做?
澄清一下:一个表最多只能有一个主键.主键由一个或多个列(来自该表)组成.如果主键由两列或多列组成,则称为composite primary key.其定义如下:
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);