La réponse de @Adrian Cornish est correcte. Cependant, il y a une autre réserve à l'abandon d'une clé primaire existante. Si cette clé primaire est utilisée comme clé étrangère par une autre table, vous obtiendrez une erreur en essayant de la supprimer. Dans certaines versions de mysql, le message d'erreur était mal formé (à partir de la version 5.5.17, ce message d'erreur est encore
alter table parent drop column id;
ERROR 1025 (HY000): Error on rename of
'./test/#sql-a04_b' to './test/parent' (errno: 150).
Si vous voulez supprimer une clé primaire qui est référencée par une autre table, vous devez d'abord supprimer la clé étrangère dans cette autre table. Vous pouvez recréer cette clé étrangère si vous la voulez toujours après avoir recréé la clé primaire.
De même, lorsque vous utilisez des clés composites, l'ordre est important. Ces
1) ALTER TABLE provider ADD PRIMARY KEY(person,place,thing);
and
2) ALTER TABLE provider ADD PRIMARY KEY(person,thing,place);
ne sont pas la même chose. Ils imposent tous deux l'unicité de cet ensemble de trois champs, mais du point de vue de l'indexation, il y a une différence. Les champs sont indexés de gauche à droite. Par exemple, considérons les requêtes suivantes :
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 peut utiliser l'index de la clé primaire dans la déclaration ALTER 1
A peut utiliser l'index de la clé primaire dans la déclaration ALTER 2
C peut utiliser l'un ou l'autre des indices
D ne peut utiliser aucun des deux indices
A utilise les deux premiers champs de l'index 2 comme index partiel. A ne peut pas utiliser l'index 1 car il ne connaît pas la partie de l'index relative au lieu intermédiaire. Il peut cependant utiliser un index partiel sur une seule personne.
D ne peut utiliser aucun des deux index car il ne connaît pas de personne.
Voir la documentation mysql ici pour plus d'informations.