Как переименовать внешний ключ в mysql?

Мы только что завершили длительную миграцию на большой таблице и закончили с помощью следующего ограничения в нашей таблице talk_tags:

CONSTRAINT `conversation_tags_ibfk_1` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`)

К сожалению, где-то была ошибка, потому что мы хотели:

CONSTRAINT `fk_conversation_tags_tags` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`)

Удаление и повторное добавление ограничения означают еще два длинных запроса. Есть ли способ переименовать ограничение в одном запросе?

Ответ 1

Вы можете комбинировать падение и воссоздать в один запрос, и это должно быть быстрее, чем удаление ограничения и создание его в двух запросах:

ALTER TABLE conversation_tags
DROP FOREIGN KEY 'conversation_tags_ibfk_1',
ADD CONSTRAINT `fk_conversation_tags_tags` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`);

Ответ 2

Прошу прощения, но ограничения можно отбрасывать и повторно удалять в mySQL

Ответ 3

Эта функция, похоже, не доступна в синтаксисе mysql ALTER TABLE.

Однако он поддерживается для Oracle.

Ответ 4

Пожалуйста, обратитесь к моему ответу в терминологии MySQL и ограничениях "vs" внешние ключи" разницу?, чтобы понять, почему имя ограничения отличается от желаемого. Однако MySQL не имеет функции переименования и, следовательно, должен DROP и ADD FK с желаемым именем. https://dev.mysql.com/doc/refman/5.5/en/alter-table.html