Невозможно удалить внешний ключ
Я хотел бы удалить внешний ключ в моей таблице, но попал в это сообщение об ошибке
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>
Ответы
Ответ 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`
и проверьте имена внешних ключей, если вы получите такие ошибки.