Как определить составной первичный ключ в SQL?

как определить составной первичный ключ, состоящий из двух полей в SQL?

Я использую PHP для создания таблиц и все. Я хочу сделать имя таблицы voting с полями QuestionID, MemeberID и vote. И составной первичный ключ состоит из полей QuestionID и MemberID.

как мне это сделать?

2 ответов


просто для уточнения: таблица может иметь не более одного первичного ключа. Первичный ключ состоит из одного или нескольких столбцов (из этой таблицы). Если первичный ключ состоит из двух или более столбцов, называется составной первичный ключ. Он определяется следующим образом:

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