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

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

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

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

Ответ 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);

Ответ 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`)
);