mysql cannot drop index needed foreign key constraint и тут же Duplicate key name. Ошибки при удалении внешнего ключа

Forums:

Наблюдения

Странная ошибка:

  • при добавлении внешнего ключа автоматически создаётся идекс
  • Внешний ключ удаляем
  • Индекс остаётся удалить его нельзя, так как он якобы используется уже удалённым внешним ключом:

    ERROR 1553 (HY000): Cannot drop index '....': needed in a foreign key constraint

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

    ERROR 1061 (42000): Duplicate key name '...'

Как-то противоречиво.

Версия базы: 5.7.22

Очень похожее обсуждается здесь: https://bugs.mysql.com/bug.php?id=77798

Причина

Всё же оказалось, что в моём случае индекс был действительно последним для другого внешнего ключа (а не того, что я удалил).
То есть алгоритм приведший к ошибке был такой:

  1. я создал ещё один внешний ключ, точно на тот же столбец, на котором уже был другой внешний ключ -- внешних ключей стало 2, а вот индекс переименовался (то есть оба стали использовать один иднекс)
  2. Потом я удалил вророй ключ
  3. остался только один индекс и его удалить уже не получается, так как хоть имя этого иднекса имя как второго уже удалённого внешнего ключа (mysql создаёт идекс для столбцов-внешних ключей), но он используется первым внешним ключом (т.к. оба внешних ключа были на одной таблице).

Решение

  • Вам надо или удалить внешний ключ, который используется данным индексом (о чем и сообщается в ошибке)
  • Или переименовать индекс, чтобы его имя было как и у внешнего ключа:
    ALTER TABLE `имяТаблицы`
      ADD INDEX `имяВнешнегоКлюча`  (`столбец-внешний-ключ`);

Key Words for FKN + antitotal forum (CS VSU):