Невозможно удалить внешний ключ
Я хотел бы удалить внешний ключ в моей таблице, но был в этом сообщении об ошибке
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);
Некоторые ссылки, которые помогут вам.
ссылка 2 [ищите Опубликовано Алекс Блюм 7 ноября 2008 г. в 17:09 и Опубликовано Гектор Дельгадильо 21 января 2011 г. 4:57]
Решение, описанное здесь Крисом Уайтом, сработало для меня.
Основная проблема заключается в том, что MySQL создает индекс и внешний ключ. Оба должны быть удалены (внешний ключ сначала противоречит тому, что сказал Крис).
показать создать таблицу 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`;
Это сделало это для меня.
Это похоже на ошибку в сообщениях об ошибках 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`
и проверьте имена внешних ключей, если вы получаете такие ошибки.