MySQL drop field;внешний ключ errorno 150 - PullRequest
5 голосов
/ 05 октября 2011

Проблемы с MySQL при использовании InnoDB и удалении неиспользуемого внешнего ключа.Внешний ключ ссылается на идентификатор другой таблицы.Однако мне это поле не нужно.

Я попытался удалить индекс fk, который не работает - говорит, что он необходим в противоречии с внешним ключом.И удаление поля, которое дает мне ошибку:

1025 - Ошибка при переименовании './axis/#sql-ad8_1531' в './axis/Schedule' (errno: 150)

Таблица в настоящее время пуста.Нет таблиц, ссылающихся на это поле.Есть идеи как избавиться от этого?Кроме создания новой таблицы?

Если я правильно читаю приведенную ниже ошибку, я не могу удалить столбец, так как объявлен индекс fk.И я не могу удалить индекс, потому что столбец существует.Цыпленок и яйцо ??

ОШИБКА ПОСЛЕДНЕГО ИНОСТРАННОГО КЛЮЧА 111004 17:05:40 Ошибка ограничения внешнего ключа оси таблицы / расписания: в таблице нет индекса, который бы содержал столбцы в качестве первых столбцов,типы данных в таблице не совпадают с типами данных в ссылочной таблице, или один из столбцов ON ... SET NULL объявлен NOT NULL.Ограничение:, Ограничение "fk_Schedule_Grp" FOREIGN KEY ("idGrp") Ссылки "Grp" ("idGrp") ВКЛaxis. Schedule не удалось!

1 Ответ

16 голосов
/ 05 октября 2011

Вам необходимо использовать

ALTER TABLE table_name DROP FOREIGN KEY constraint_name

Здесь constraint_name - это имя ограничения, а не индекс.Если вы не знаете, что это такое, вы можете узнать, набрав SHOW CREATE TABLE.Это идентификатор, который появляется после слова CONSTRAINT.

Редактировать: из вашего дополнения к вопросу, похоже, вам нужно ввести

ALTER TABLE table_name DROP FOREIGN KEY fk_Schedule_Grp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...