mysql cannot drop index needed foreign key constraint и тут же Duplicate key name. Ошибки при удалении внешнего ключа
Primary tabs
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
Причина
Всё же оказалось, что в моём случае индекс был действительно последним для другого внешнего ключа (а не того, что я удалил).
То есть алгоритм приведший к ошибке был такой:
- я создал ещё один внешний ключ, точно на тот же столбец, на котором уже был другой внешний ключ -- внешних ключей стало 2, а вот индекс переименовался (то есть оба стали использовать один иднекс)
- Потом я удалил вророй ключ
- остался только один индекс и его удалить уже не получается, так как хоть имя этого иднекса имя как второго уже удалённого внешнего ключа (mysql создаёт идекс для столбцов-внешних ключей), но он используется первым внешним ключом (т.к. оба внешних ключа были на одной таблице).
Решение
- Вам надо или удалить внешний ключ, который используется данным индексом (о чем и сообщается в ошибке)
- Или переименовать индекс, чтобы его имя было как и у внешнего ключа:
ALTER TABLE `имяТаблицы` ADD INDEX `имяВнешнегоКлюча` (`столбец-внешний-ключ`);
- Log in to post comments
- 5284 reads