I would like to rename an index. I’ve looked at the alter table documentation, but I can’t figure out the syntax to simply rename an index. When doing it through the MySQL GUI, it drops the index, and creates a new one. While this works, I would like to avoid rebuilding the entire index just to change the name of an index.
[ADDITIONAL INFO]
In the alter table documentation it states
Alterations that modify only table
metadata and not table data can be
made immediately by altering the
table’s .frm file and not touching
table contents. The following changes
are fast alterations that can be made
this way:* Renaming a column or index.
However, when I tried to rename the index by editing the .frm file (on a test database) and restarting the server, it now states “Could not fetch columns” in the UI when trying to list the columns, and when trying to run a query, it returns the error “Unknown table engine ””. The .frm file has a lot of binary content. Is there a good tool for editing the binary info.
I answered this question in 2009. At that time there was no syntax in MySQL to rename an index.
Since then, MySQL 5.7 introduced an
ALTER TABLE RENAME INDEXsyntax.http://dev.mysql.com/doc/refman/5.7/en/alter-table.html says in part:
Earlier versions of MySQL, e.g. 5.6 and earlier, support no syntax in
ALTER TABLEto rename an index (or key, which is a synonym).The only solution was to
ALTER TABLE DROP KEY oldkeyname, ADD KEY newkeyname (...).There is no
ALTER INDEXcommand in MySQL. You can onlyDROP INDEXand thenCREATE INDEXwith the new name.Regarding your update above: perhaps the documentation isn’t precise enough. Regardless, there’s no SQL syntax to rename an index.
An index is a data structure that can be rebuilt from the data (in fact it’s recommended to rebuild indexes periodically with
OPTIMIZE TABLE). It takes some time, but it’s a commonplace operation. Indexes data structures are separate from table data, so adding or dropping an index shouldn’t need to touch the table data, as the documentation says.Regarding the
.frmfile, MySQL does not support editing the.frmfile. I wouldn’t do it for any reason. You are 100% guaranteed to corrupt your table and make it unusable.