无法删除外键

时间:2012-05-17 08:57:40

标签: mysql foreign-keys foreign-key-relationship mysql-error-1025

我想将外键放在我的表中但是已经进入了这个错误消息

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 个答案:

答案 0 :(得分:33)

所描述的解决方案here by Chris White对我有用。

根本问题是MySQL创建索引和外键。两者都必须删除(外键首先与克里斯所说的相反)。

  1. show 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 |
    
  2. 删除外键约束:

    ALTER TABLE table_name DROP FOREIGN KEY `table_name_ibfk_1`;
    
  3. 删除密钥

    ALTER TABLE table_name DROP KEY `column_tablein_26440ee6`;
    
  4. 那为我做了。

答案 1 :(得分:7)

它看起来像MySQL的错误消息中的错误。 (http://bugs.mysql.com/bug.php?id=10333

使用SHOW CREATE TABLE table_name查看外键的实际名称。在生成具有错误拼写外键名称的查询时,看起来可能是mysql查询浏览器问题。

答案 2 :(得分:6)

为避免在尝试删除外键时出现此错误,请使用约束名称而不是外键的列名。

当我尝试

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);

一些可以帮助您的链接。

link 1

link 2 [寻找Alex Blume发表于2008年11月7日下午5:09&amp; Hector Delgadillo发表于2011年1月21日上午4:57]

答案 3 :(得分:1)

为避免在尝试删除外键时出现此错误,请使用约束名称而不是外键的列名

答案 4 :(得分:0)

您应该尝试使用Fahim Parkar建议的外键名称。实际上,它总是不起作用。

在我的情况下,我使用了

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`

如果出现此类错误,请检查外键名称。