Подтвердить что ты не робот

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

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

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>
4b9b3361

Ответ 1

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

Когда я попробовал

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 [look for Опубликовано Alex Blume 7 ноября 2008 17:09 вечера и опубликовано Hector Delgadillo от 21 января 2011 4:57 утра ]

Ответ 2

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

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

  • показать create table 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 |
    
  • Удалить ограничение внешнего ключа:

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

    ALTER TABLE table_name DROP KEY `column_tablein_26440ee6`;
    

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

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

чтобы добавить fk путем создания.

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

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

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

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

ALTER TABLE `table1` DROP FOREIGN KEY `fk`

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

SHOW CREATE TABLE `table1`

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