Невозможно удалить внешний ключ

Я хотел бы удалить внешний ключ в моей таблице, но был в этом сообщении об ошибке

mysql> alter table customers drop foreign key customerid;
ERROR 1025 (HY000): Error on rename of '.\products\customers' to '.\products\#sql2-7ec-a3' (errno: 152)
mysql>

5 ответов

Решение

Чтобы избежать этой ошибки при попытке удалить внешний ключ, используйте имя ограничения, а не имя столбца внешнего ключа.

Когда я пытался

mysql> ALTER TABLE mytable DROP PRIMARY KEY;

Я получил ошибку как

ERROR 1025 (HY000): Error on rename of '.\database\#sql-454_3' to '.\database\mytable' (errno: 150).

Я решил это с помощью:

mysql> ALTER TABLE mytable DROP PRIMARY KEY, ADD PRIMARY KEY (column1,column2,column3);

Некоторые ссылки, которые помогут вам.

ссылка 1

ссылка 2 [ищите Опубликовано Алекс Блюм 7 ноября 2008 г. в 17:09 и Опубликовано Гектор Дельгадильо 21 января 2011 г. 4:57]

Решение, описанное здесь Крисом Уайтом, сработало для меня.

Основная проблема заключается в том, что MySQL создает индекс и внешний ключ. Оба должны быть удалены (внешний ключ сначала противоречит тому, что сказал Крис).

  1. показать создать таблицу table_name;

    SHOW CREATE TABLE `table_name`:
    
    | table_name | CREATE TABLE `table_name` (
      `id` int(20) unsigned NOT NULL auto_increment,
      `key_column` smallint(5) unsigned default '1',
      KEY `column_tablein_26440ee6` (`key_column`),  <--- shows key name
      CONSTRAINT `table_name_ibfk_1` FOREIGN KEY (`key_column`) REFERENCES <--- shows foreign key constraint name
    `second_table` (`id`) ON DELETE SET NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
    
  2. Удалить ограничение внешнего ключа:

    ALTER TABLE table_name DROP FOREIGN KEY `table_name_ibfk_1`;
    
  3. Удалить ключ

    ALTER TABLE table_name DROP KEY `column_tablein_26440ee6`;
    

Это сделало это для меня.

Это похоже на ошибку в сообщениях об ошибках MySQL. ( http://bugs.mysql.com/bug.php?id=10333)

Используйте SHOW CREATE TABLE table_name чтобы увидеть реальное имя внешнего ключа. Похоже, что это может быть проблема браузера запросов MySQL при генерации запроса с неправильным написанием имени внешнего ключа.

Чтобы избежать этой ошибки при попытке удалить внешний ключ, используйте имя ограничения, а не имя столбца внешнего ключа.

Вы должны попробовать с именем внешнего ключа, как предложил Фахим Паркар. На самом деле это тоже не всегда работает.

В моем случае я использовал

FOREIGN KEY `fk`(`col1`) REFERENCES `table2`(`col1`)

код для добавления ФК путем создания.

Проблема с этим кодом в том, что он недопустим и должен выдавать какую-то синтаксическую ошибку, но все же в него добавлен внешний ключ со случайным именем.

Когда я добавил FK с правильным синтаксисом:

CONSTRAINT `fk` FOREIGN KEY (`col1`) REFERENCES `table2`(`col1`)

следующий код отбросил его правильно:

ALTER TABLE `table1` DROP FOREIGN KEY `fk`

Так что этот тип ошибки может произойти, если вы попытаетесь удалить внешний ключ с недопустимым именем. Важно просмотреть свойства таблицы с

SHOW CREATE TABLE `table1`

и проверьте имена внешних ключей, если вы получаете такие ошибки.

Другие вопросы по тегам