@ Адриан Корниш ответ правильный. Тем не менее, есть еще одна оговорка для удаления существующего первичного ключа. Если этот первичный ключ используется в качестве внешнего ключа другой таблицей, вы получите сообщение об ошибке при попытке его удалить. В некоторых версиях mysql сообщение об ошибке было искажено (по состоянию на 5.5.17 это сообщение об ошибке по-прежнему
alter table parent drop column id;
ERROR 1025 (HY000): Error on rename of
'./test/#sql-a04_b' to './test/parent' (errno: 150).
Если вы хотите удалить первичный ключ, на который ссылается другая таблица, сначала вам нужно будет удалить внешний ключ в этой другой таблице. Вы можете воссоздать этот внешний ключ, если вы все еще хотите его после восстановления первичного ключа.
Кроме того, при использовании составных ключей важен порядок. Эти
1) ALTER TABLE provider ADD PRIMARY KEY(person,place,thing);
and
2) ALTER TABLE provider ADD PRIMARY KEY(person,thing,place);
это не одно и то же. Они оба обеспечивают уникальность этого набора из трех полей, однако с точки зрения индексации есть разница. Поля индексируются слева направо. Например, рассмотрим следующие запросы:
A) SELECT person, place, thing FROM provider WHERE person = 'foo' AND thing = 'bar';
B) SELECT person, place, thing FROM provider WHERE person = 'foo' AND place = 'baz';
C) SELECT person, place, thing FROM provider WHERE person = 'foo' AND place = 'baz' AND thing = 'bar';
D) SELECT person, place, thing FROM provider WHERE place = 'baz' AND thing = 'bar';
B может использовать индекс первичного ключа в инструкции ALTER 1
A может использовать индекс первичного ключа в инструкции ALTER 2
C может использовать любой индекс
D не может использовать ни один индекс
A использует первые два поля в индексе 2 как частичный индекс. Невозможно использовать индекс 1, потому что он не знает промежуточную часть индекса. Хотя он все еще может использовать частичный индекс только для человека.
Я не могу использовать ни один индекс, потому что он не знает человека.
См. MySQL документы здесь для получения дополнительной информации.