No estaba seguro si cambiar la lista ENUM () no es posible, así que hice una prueba. En MySQL v5.1.58 hice una tabla de prueba InnoDB que contiene un campo llamado 'bool' de tipo ENUM ('yes', 'no').
Entonces ejecuté ...
ALTER TABLE `test`
CHANGE `bool` `bool` ENUM( 'yes', 'no', 'maybe' )
CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL
...Y funcionó.
¿He hecho algo mal? ¿Depende del motor db? ¿Por qué todos dicen que no es posible cambiar una lista ENUM ()? p.ej. aquí http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/
Respuestas:
Mientras la tabla esté vacía, no hay problema. Siempre y cuando se agreguen nuevos valores para ENUM y no se renombre dado una tabla poblada, nuevamente no hay problema.
El ENUM que redefinió en su pregunta en realidad mantuvo los valores internos originales para sí y no como lo recordó la tabla de prueba por última vez.
Lo siguiente se aplica a las tablas pobladas:
¿Qué hay de esto?
Ahora tienes un problema. Los valores ENUM en una tabla completamente poblada tendrían sus valores internos invertidos de modo que sí es ahora no y no es ahora sí.
¿Qué hay de esto?
Gran problema. En una tabla poblada, sí es ahora tal vez. Las nuevas filas insertadas con sí se desconectan de las filas anteriores de sí porque ahora significan tal vez.
RESUMEN
Existen técnicas de cambio y cebo de muy alto riesgo para hacer esto muy rápidamente en MyISAM . Recomiendo encarecidamente que no haga esto en InnoDB debido a su interacción de id de tablespace con ibdata1.
fuente
For example, a column specified as ENUM('one', 'two', 'three') can have any of the values shown here. The index of each value is also shown.
y el mapa de valor / índice está conceptualizado. Por lo tanto, habría un valor ENUM en una tabla asociada con el número de índice interno. Reorganizar las cadenas reorganizará la indexación de metadatos. Esto no es un buen augurio para una tabla poblada al redefinir un ENUM.