MySQL Error throw при удалении индекса внешнего ключа. - PullRequest
0 голосов
/ 29 июля 2011

Я создал две таблицы со ссылкой на другую таблицу:

Мне нравится это:

Таблица1:

CREATE TABLE species 
(
  id TINYINT NOT NULL AUTO_INCREMENT, 
  name VARCHAR(50) NOT NULL, 
  PRIMARY KEY(id)
) ENGINE=INNODB;

Таблица2 (ссылка на таблицу выше)

CREATE TABLE zoo 
(
  id INT(4) NOT NULL, 
  name VARCHAR(50) NOT NULL,
  FK_species TINYINT(4) NOT NULL, 
  INDEX (FK_species), 
  FOREIGN KEY (FK_species) REFERENCES species (id), 
  PRIMARY KEY(id)
) ENGINE=INNODB;

Чем автоматически создается индекс для FOREIGN KEY для FK_species в таблице zoo .

Теперь я пытаюсь удалить индекс таблицы zoo:

ALTER TABLE zoo DROP INDEX FK_species;

Отображается следующая ошибка MySQL.

Error on rename of '.\test\#sql-1ec_9d' to '.\test\zoo' (errno: 150)

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

С Ограничения FOREIGN KEY @ dev.mysql.com :

InnoDB поддерживает использование ALTER TABLE для удаления внешних ключей:

ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;

Если предложение FOREIGN KEY включало имя CONSTRAINT при создании внешнего ключа, вы можете обратиться к этому имени, чтобы удалить внешний ключ.В противном случае значение fk_symbol внутренне генерируется InnoDB при создании внешнего ключа.Чтобы узнать значение символа, когда вы хотите удалить внешний ключ, используйте оператор SHOW CREATE TABLE.

1 голос
/ 29 июля 2011

Сначала необходимо получить имя для ограничения.

Пример:

SHOW CREATE TABLE zoo;

-> .... 
   CONSTRAINT `zoo_ibfk_1` FOREIGN KEY (`FK_species`) REFERENCES `species` (`id`)

... а затем ...

ALTER TABLE zoo DROP FOREIGN KEY zoo_ibfk_1;

Подробнее об этомздесь: http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

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