@Adrian Cornish a répondu correctement. Cependant, il y a une autre mise en garde à la suppression 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 y était mal formé (à partir de 5.5.17, ce message d'erreur est toujours
alter table parent drop column id;
ERROR 1025 (HY000): Error on rename of
'./test/#sql-a04_b' to './test/parent' (errno: 150).
Si vous souhaitez supprimer une clé primaire référencée par une autre table, vous devrez d'abord supprimer la clé étrangère dans cette autre table. Vous pouvez recréer cette clé étrangère si vous le souhaitez toujours après avoir recréé la clé primaire.
De plus, lors de l'utilisation de clés composites, l'ordre est important. Celles-ci
1) ALTER TABLE provider ADD PRIMARY KEY(person,place,thing);
and
2) ALTER TABLE provider ADD PRIMARY KEY(person,thing,place);
ce n'est pas la même chose. Ils imposent tous deux l'unicité sur 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érez 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 clé primaire dans l'instruction ALTER 1
A peut utiliser l'index de clé primaire dans l'instruction ALTER 2
C peut utiliser l'un des index
D ne peut utiliser aucun des index
A utilise les deux premiers champs de l'index 2 comme index partiel. Un ne peut pas utiliser l'index 1 car il ne connaît pas la partie intermédiaire de l'index. Cependant, il pourrait toujours être en mesure d'utiliser un index partiel sur une seule personne.
D ne peut utiliser aucun des index car il ne connaît personne.
Voir la documentation mysql ici pour plus d'informations.