Puis-je renommer les valeurs d'une colonne MySQL ENUM en une seule requête?
12
Supposons que j'ai une table de base de données avec un ENUM('value_one','value_two'). Je veux changer cela en un ENUM('First value','Second value'). Je fais actuellement cela comme suit:
La technique que nous sommes sur le point de démontrer n'est pas prise en charge, n'est pas documentée et peut ne pas fonctionner. Utilisez à vos risques et périls. Nous vous conseillons de sauvegarder vos données en premier!
+1 pour une réponse ingénieuse! Cependant, je ne vais pas essayer ceci et vous faire savoir comment cela s'est passé car la question fait référence à un script de mise à niveau pour toutes les bases de données de production en direct de mes clients ;-) Je peux cependant essayer ceci dans un environnement de développement juste pour s'amuser. Mais avec cet avertissement, je ne ferais jamais ça en production!
Josh
3
Une solution simple serait:
1- ajouter une nouvelle colonne:
ALTER TABLE `table` ADD `enum2` ENUM('First value', 'Second value') NOT NULL AFTER `enum`;
2- Copiez la valeur de la colonne dans enum2 avec remplacements:
UPDATE `table` SET enum2=REPLACE(`column`, "value_one", "new value")
3- colonne goutte column, changement de nom enumà column.
REMARQUE : cette question remonte au 2011-10-05, ma solution est valide pour MYSQL 4.1 et plus récent (AFAIK)
Bien que cela semble être une bonne solution (et pas aussi angoissante que la réponse acceptée!), Il convient de noter que l'étape 3 nécessite au moins une ALTER TABLEdéclaration, et l'OP recherchait quelque chose qui n'en exigeait qu'une. Encore une fois, cela dit, cela semble être une solution solide parfaitement standard.
Une solution simple serait:
1- ajouter une nouvelle colonne:
ALTER TABLE `table` ADD `enum2` ENUM('First value', 'Second value') NOT NULL AFTER `enum`;
2- Copiez la valeur de la colonne dans enum2 avec remplacements:
UPDATE `table` SET enum2=REPLACE(`column`, "value_one", "new value")
3- colonne goutte
column
, changement de nomenum
àcolumn
.REMARQUE : cette question remonte au 2011-10-05, ma solution est valide pour MYSQL 4.1 et plus récent (AFAIK)
la source
ALTER TABLE
déclaration, et l'OP recherchait quelque chose qui n'en exigeait qu'une. Encore une fois, cela dit, cela semble être une solution solide parfaitement standard.