我在2009年回答了这个问题。当时MySQL中没有语法可以重命名索引。
从那时起,MySQL 5.7引入了一种ALTER TABLE RENAME INDEX
语法。
http://dev.mysql.com/doc/refman/5.7/en/alter-table.html部分说:
RENAME INDEX old_index_name TO new_index_name
重命名索引。这是标准SQL的MySQL扩展。该表的内容保持不变。old_index_name
必须是同一ALTER TABLE
语句未删除的表中现有索引的名称。new_index_name
是新的索引名称,在应用更改后,该名称不能与结果表中的索引名称重复。两个索引名称都不能为PRIMARY
。
MySQL的早期版本(例如5.6和更早版本)不支持使用语法ALTER TABLE
重命名索引(或键,这是同义词)。
唯一的解决方案是ALTER TABLE DROP KEY oldkeyname, ADD KEY newkeyname (...)
。
ALTER INDEX
MySQL中没有命令。您只能DROP INDEX
再CREATE INDEX
使用新名称。
关于以上更新:也许文档不够精确。无论如何,没有SQL语法可以重命名索引。
索引是可以从数据中重建的数据结构(实际上,建议使用定期重建索引OPTIMIZE TABLE
)。这需要一些时间,但这是司空见惯的操作。索引数据结构与表数据是分开的,因此,如文档所述,添加或删除索引不需要接触表数据。
关于.frm
文件,MySQL不支持编辑.frm
文件。出于任何原因我都不会这样做。您100%保证会损坏您的表并使它无法使用。