Как я переименовываю Индекс в MySQL

Преимущество попытки/выгоды и исключений в целом, больше для людей разработка библиотеки как PDO. Они позволяют разработчику системы обрабатывать неопределенные ситуации или неожиданные результаты быстрым и простым способом. Возьмите соединение с базой данных. Что должно система делать, если база данных не может быть достигнута. Это должно остановить выполнение? Попробовать еще раз? Бросить предупреждение и продолжить? Разработчик системы не может знать то, что Вам будет нужен он, чтобы сделать, они они выдают исключение, которое Вы позже поймаете и обработаете.

преимущество для Вас, как потребитель системы вместо того, чтобы возвращать некоторый неопределенный код ошибки или простую булеву ложь, которую это привело к сбою, Вы получаете Объект исключения, который будет

  1. быть названным таким способом, которым более очевидно, что пошло не так, как надо (Если я помню право, PDO только имеет один Тип исключительной ситуации, но другие системы содержат несколько типов исключительной ситуации для различных видов ошибок)

  2. May содержит методы и свойства, которые могут помочь Вам выяснить , почему исключение было выдано

, Это - теория так или иначе. Существует много умных людей, которые утверждают, что Исключениями является способ пойти. Существует также много умных людей, которые думают, что Исключениями является дьявол и опора для ленивых разработчиков системы. Нет ничего напоминающего согласие по этой проблеме.

76
задан Kibbee 23 September 2009 в 00:50
поделиться

1 ответ

Я ответил на этот вопрос в 2009 году. В то время в MySQL не было синтаксиса для переименования индекса.

С тех пор MySQL 5.7 представил ALTER TABLE RENAME INDEX ] синтаксис.

http://dev.mysql.com/doc/refman/5.7/en/alter-table.html частично говорит:

  • ПЕРЕИМЕНОВАТЬ ИНДЕКС old_index_name НА 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 (...) .

В MySQL нет команды ALTER INDEX . Вы можете только DROP INDEX , а затем CREATE INDEX с новым именем.


Относительно вашего обновления выше: возможно, документация недостаточно точна. Тем не менее, нет синтаксиса SQL для переименования индекса.

Индекс - это структура данных, которую можно перестроить из данных (на самом деле рекомендуется периодически перестраивать индексы с помощью OPTIMIZE TABLE ). На это нужно время, но это обычная операция. Структуры данных индексов отделены от табличных данных, поэтому добавление или удаление индекса не должно касаться данных таблицы, как говорится в документации.

Что касается файла .frm , MySQL не поддерживает редактирование .frm файл. Я бы не стал этого делать ни по какой причине. Вы на 100% гарантированно испортите свою таблицу и сделаете ее непригодной для использования.


132
ответ дан 24 November 2019 в 11:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: