2011-11-17 11 views

Respuesta

6

El cambio de nombre de una columna (con ALTER TABLE ... CHANGE COLUMN) lamentablemente requiere que MySQL ejecute una copia de tabla completa.

Echa un vistazo pt-online-schema-change. Esto te ayuda a realizar muchos tipos de cambios ALTER en una tabla sin bloquear toda la tabla mientras dure ALTER. Puede seguir leyendo y escribiendo la tabla original mientras copia los datos en la nueva tabla. Los cambios se capturan y se aplican a la nueva tabla a través de activadores.

Ejemplo:

pt-online-schema-change h=localhost,D=databasename,t=tablename \ 
    --alter 'CHANGE COLUMN oldname newname NUMERIC(9,2) NOT NULL' 

Actualización: MySQL 5.6 puede hacer algunos tipos de operaciones de modificación sin volver a la mesa, y cambiar el nombre de una columna es uno de los admitidos como un cambio en línea . Consulte http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html para obtener una descripción general de los tipos de alteraciones compatibles o no con esto.

0

Si no hay ninguna restricción en él, puede modificarlo sin problemas hasta donde yo sé. Si hay que eliminar primero las restricciones, modifique y vuelva a agregar las restricciones.

0

Alterar una tabla con muchas filas puede llevar mucho tiempo (aunque si las columnas involucradas no están indexadas, puede ser trivial).

Si desea específicamente a evitar el uso de la sintaxis ALTER TABLE creado específicamente para ese fin, siempre se puede crear una tabla con casi la misma estructura exacta (pero diferente nombre) y copiar todos los datos en él, así:

CREATE TABLE `your_table2` ...; 
    -- (using the query from SHOW CREATE TABLE `your_table`, 
    -- but modified with your new column changes) 

LOCK TABLES `your_table` WRITE; 
INSERT INTO `your_table2` SELECT * FROM `your_table`; 
RENAME TABLE `your_table` TO `your_table_old`, `your_table2` TO `your_table`; 

Para algunas consultas ALTER TABLE, lo anterior puede ser un poco más rápido. Sin embargo, para un simple cambio de nombre de columna, podría ser trivial. Podría intentar crear una tabla idéntica y realizar el cambio para ver cuánto tiempo estás mirando en realidad.

Cuestiones relacionadas