Как переименовать индекс в MySQL



Я хотел бы переименовать индекс. Я посмотрел на alter table документации, но я не могу понять синтаксис, чтобы просто переименовать индекс. При выполнении этого через графический интерфейс MySQL он отбрасывает индекс и создает новый. Хотя это работает, я хотел бы избежать перестройки всего индекса, чтобы просто изменить имя индекса.



[ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ]



в документации alter table указано




изменения, которые изменить только таблицу
метаданные, а не табличные данные могут быть
немедленно, изменяя
таблицы. файл frm и не трогать
содержание таблицы. Следующее изменение
быстрые изменения, которые могут быть сделаны
вот так:



* Renaming a column or index.



однако, когда я попытался переименовать индекс путем редактирования .файл frm (в тестовой базе данных) и перезапуск сервера, теперь он заявляет "не удалось извлечь столбцы" в пользовательском интерфейсе при попытке перечислить столбцы и при попытке выполнить запрос, он возвращает ошибка "неизвестный движок таблицы"". Этот.файл frm имеет много двоичного содержимого. Есть ли хороший инструмент для редактирования двоичной информации.

670   4  

4 ответов:

я ответил на этот вопрос в 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 переименовать индекс. Это расширение MySQL для стандартного SQL. Содержание таблицы остается неизменным. 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 не поддерживает редактирование . Я бы не стал этого делать ни за что. Вы на 100% гарантированно испортите свой стол и сделаете его непригодным для использования.


Для MySQL 5.7:

ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_index_name

для более старых версий MySQL:

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

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

этот вопрос был задан много лет назад и последний раз обновлялся более полугода назад. Тем не менее я чувствую необходимость добавить этот совет:

Если индексированный столбец используется в другом месте в качестве внешнего ключа, вы можете столкнуться с ошибкой, связанной с этим. Это может помочь:

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

надеюсь, кто-то найдет это полезным.

на Oracle 11g (по крайней мере) он такой:

ALTER INDEX upper_ix RENAME TO upper_name_ix;

Comments

    Ничего не найдено.