web-dev-qa-db-fra.com

mysql, alter colonne supprimer la clé primaire et auto_increment

Je change ma table mysql db d'un id (auto) à un uid.

ALTER TABLE companies DROP PRIMARY KEY;
ALTER TABLE companies ADD PRIMARY KEY (`uuid`);

C'est l'erreur que j'obtiens ..

[SQL] ALTER TABLE companies DROP PRIMARY KEY;
[Err] 1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

Ce que je comprends, je dois changer l'identifiant en non-incrémentation automatique car je le supprime comme clé primaire.? Quelle est la syntaxe pour changer une colonne pour supprimer la clé primaire et l'incrémentation automatique?

ALTER TABLE companies change id id ?????????? int(11)
27
Brett

Si vous devez supprimer l'incrémentation automatique et la clé primaire de la colonne id dans une seule instruction SQL, cela devrait faire:

ALTER TABLE companies DROP PRIMARY KEY, CHANGE id id int(11);

En fait, vous devriez pouvoir tout faire en un seul ALTER TABLE requete:

ALTER TABLE companies
DROP PRIMARY KEY,
CHANGE id id int(11),
ADD PRIMARY KEY (uuid);
32
Lauri Lehtinen

Lorsque vous ne modifiez pas le nom de la colonne, vous pouvez utiliser MODIFY:

ALTER TABLE `companies` MODIFY `id` int(11), 
                           DROP PRIMARY KEY, 
                   ADD PRIMARY KEY (`uuid`);

En faisant cela dans une seule instruction alter, il est également traité comme atomique, il n'y a donc aucune chance d'incohérence entre les requêtes (contrairement à l'exécution de plusieurs instructions en ligne).

4
Ray

La requête pour supprimer l'incrémentation automatique est:

alter table companies DROP PRIMARY KEY,
change id id int(11) NOT NULL

Vous pouvez maintenant voir que la structure de la table est sans incrémentation automatique.

Si vous souhaitez ajouter une clé primaire à une autre colonne, utilisez cette requête

alter table companies add PRIMARY KEY(uuid)

Si vous souhaitez supprimer l'incrémentation automatique, la clé primaire et ajouter la clé primaire à la nouvelle colonne dans la même requête, utilisez cette requête

alter table comapnies DROP PRIMARY KEY,
   change id id int(11) NOT NULL,
   add PRIMARY KEY(uuid)
3
John