¿Puedo cambiar el nombre de los valores en una columna ENUM de MySQL en una consulta?
12
Supongamos que tengo una tabla de base de datos con un ENUM('value_one','value_two'). Quiero cambiar eso a un ENUM('First value','Second value'). Actualmente estoy haciendo eso de la siguiente manera:
La técnica que estamos a punto de demostrar es incompatible, indocumentada y puede no funcionar. Úselo bajo su responsabilidad. ¡Le recomendamos que haga una copia de seguridad de sus datos primero!
Darle una oportunidad ! (Por favor, háganos saber cómo resultó)
ACTUALIZACIÓN 2011-10-05 17:49 EDT
Si la tabla es MyISAM y tiene suficiente espacio en producción y una ventana de tiempo de inactividad directa, intente esto:
service mysql restart --skip-networking
En una sesión separada de OS / SSH, haga una copia de la tabla
¡+1 por una respuesta ingeniosa! Sin embargo, no lo intentaré y le haré saber cómo resultó, ya que la pregunta se refiere a un script de actualización para todas las bases de datos de producción en vivo de mis clientes ;-) Sin embargo, puedo probar esto en un entorno de desarrollo solo por diversión. Pero con esa advertencia, ¡nunca lo ejecutaré en producción!
Josh
3
Una solución simple sería:
1- agrega una nueva columna:
ALTER TABLE `table` ADD `enum2` ENUM('First value', 'Second value') NOT NULL AFTER `enum`;
2- Copie el valor de la columna a enum2 con reemplazos:
UPDATE `table` SET enum2=REPLACE(`column`, "value_one", "new value")
Si bien esto parece una buena solución (¡y no tan estresante como la respuesta aceptada!), Vale la pena señalar que el paso 3 requiere al menos una ALTER TABLEdeclaración, y el OP estaba buscando algo que solo requiriera una. Una vez más, dicho esto, parece una solución sólida perfectamente estándar.
Una solución simple sería:
1- agrega una nueva columna:
ALTER TABLE `table` ADD `enum2` ENUM('First value', 'Second value') NOT NULL AFTER `enum`;
2- Copie el valor de la columna a enum2 con reemplazos:
UPDATE `table` SET enum2=REPLACE(`column`, "value_one", "new value")
3- Colocar columna
column
, renombrarenum
acolumn
.NOTA : esta pregunta se remonta al 2011-10-05, mi solución es válida para MYSQL 4.1 y posterior (AFAIK)
fuente
ALTER TABLE
declaración, y el OP estaba buscando algo que solo requiriera una. Una vez más, dicho esto, parece una solución sólida perfectamente estándar.