34 votos

Cómo renombrar un índice en MySQL

Me gustaría cambiar el nombre de un índice. He mirado en el alter table documentación, pero no puedo averiguar la sintaxis para simplemente cambiar el nombre de un índice. Al hacerlo a través de la MySQL GUI, cae el índice, y se crea uno nuevo. Aunque esto funciona, me gustaría evitar la total reconstrucción del índice sólo para cambiar el nombre de un índice.

[INFORMACIÓN ADICIONAL]

En la instrucción alter table documentación que los estados

Las alteraciones que modifican sólo tabla los metadatos y no los datos de la tabla se puede hacerse inmediatamente por la alteración de la de la tabla .frm archivo y no tocar contenido de la tabla. Los siguientes cambios son rápidas alteraciones que se pueden hacer de esta manera:

* Renaming a column or index.

Sin embargo, cuando traté de cambiar el nombre del índice de la edición de el .frm archivo (en una base de datos de prueba) y reiniciar el servidor, ahora dice "no se Pudo recuperar columnas" en la interfaz de usuario cuando se intenta lista de las columnas, y cuando se intenta ejecutar una consulta, devuelve el error "Desconocido tabla del "motor". El .frm archivo tiene un montón de contenido binario. Hay una buena herramienta para la edición de los binarios de información.

69voto

Bill Karwin Puntos 204877

MySQL soporta ninguna sintaxis en ALTER TABLE cambiar el nombre de un índice (o clave, que es un sinónimo).

Usted puede ALTER TABLE DROP KEY oldkeyname, ADD KEY newkeyname (...).

No hay ninguna ALTER INDEX de comandos de MySQL. Usted sólo puede DROP INDEX y, a continuación, CREATE INDEX con el nuevo nombre.


Con respecto a la actualización anterior: tal vez la documentación no es lo suficientemente precisa. Independientemente, no hay sintaxis SQL para cambiar el nombre de un índice.

Un índice es una estructura de datos que puede ser reconstruido a partir de los datos (de hecho, es recomendable volver a generar los índices periódicamente con OPTIMIZE TABLE). Toma algo de tiempo, pero es un lugar común de la operación. Los índices de las estructuras de datos son independientes de los datos de la tabla, para agregar o quitar un índice no es necesario tocar los datos de la tabla, ya que la documentación dice.

Con respecto a la .frm archivo, MySQL no soporta la edición de la .frm archivo. Yo no lo haría por cualquier razón. Usted está 100% garantizado para corromper su tabla y quedar inservible.


actualización 4/22/2013: parece que MySQL 5.7 tendrá un ALTER TABLE cambiar el nombre de ÍNDICE de la sintaxis. http://dev.mysql.com/doc/refman/5.7/en/mysql-nutshell.html ya lo escucharon aquí primero.

21voto

joelparkerhenderson Puntos 10128

Para MySQL 5.7:

ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_index_name

Para versiones anteriores de MySQL:

ALTER TABLE tbl_name DROP INDEX old_index_name, ADD INDEX new_index_name (...)

Ver http://dev.mysql.com/doc/refman/5.7/en/alter-table.html

2voto

Ifedi Okonkwo Puntos 53

Esta pregunta se pidió hace años y fue actualizada hace más de medio año. Todavía siento la necesidad de añadir este Consejo:

Si se utiliza la columna indexada en otros lugares como una clave externa, puede encontrar un error relacionado con eso. Hacer esto puede ayudar:

SET FOREIGN_KEY_CHECKS = 0;
ALTER TABLE tbl DROP INDEX index_name;
ALTER TABLE tbl ADD INDEX new_index_name (indexed_column);

Espero que alguien encuentre esto útil.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X