Chciałbym zmienić nazwę indeksu. Przejrzałem dokumentację tablicy alter , ale nie potrafię wymyślić składni, aby zmienić nazwę indeksu. Robiąc to przez GUI MySQL, porzuca indeks i tworzy nowy. Chociaż to działa, chciałbym uniknąć przebudowywania całego indeksu tylko po to, aby zmienić nazwę indeksu.
[DODATKOWE INFORMACJE]
W dokumentacji tablicy alter stwierdza
Zmiany, które modyfikują tylko metadane tabeli, a nie dane tabeli, można wprowadzić natychmiast, zmieniając plik .frm tabeli i nie dotykając zawartości tabeli. Następujące zmiany to szybkie zmiany, które można wprowadzić w ten sposób:
* Renaming a column or index.
Jednak gdy próbowałem zmienić nazwę indeksu, edytując plik .frm (w testowej bazie danych) i ponownie uruchamiając serwer, w interfejsie użytkownika pojawia się teraz komunikat „Nie można pobrać kolumn” podczas próby wyświetlenia kolumn i podczas próby uruchomienia zapytanie, zwraca błąd „Nieznany silnik tabeli ''”. Plik .frm zawiera dużo zawartości binarnej. Czy istnieje dobre narzędzie do edycji informacji binarnych?
W przypadku MySQL 5.7:
ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_index_name
Dla starszych wersji MySQL:
ALTER TABLE tbl_name DROP INDEX old_index_name, ADD INDEX new_index_name (...)
Zobacz http://dev.mysql.com/doc/refman/5.7/en/alter-table.html
źródło
To pytanie zostało zadane wieki temu, a ostatnio zostało zaktualizowane ponad pół roku temu. Wciąż czuję potrzebę dodania tej wskazówki:
Jeśli indeksowana kolumna jest używana w innym miejscu jako klucz obcy, możesz napotkać błąd z tym związany. Może to pomóc:
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;
Mam nadzieję, że ktoś uzna to za przydatne.
źródło
ALTER TABLE tbl ADD INDEX new_index_name (indexed_column), DROP INDEX index_name