24

我想放弃我的表的外键,但一直到这个错误信息无法删除外键

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

这可能会帮助您了解 http://stackoverflow.com/questions/160233/what-does-mysql-error-1025-hy000-error-on-rename-of-foo-errorno-150-me – Imdad

+1

@Imdad这个链接描述了另一个错误 - (errno:150) – Devart

+0

试试这个。创建新表(没有外键约束)。将数据复制到新表(使用语法INSERT INTO new_table SELECT * FROM old_table)删除旧表 – Imdad

回答

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 [查找发布者亚历克斯·布鲁姆在2008年11月7日下午5时09 &发布海克特德尔加迪略于2011年1月21日上午4时57分]

+0

不适合我。 – user60627

+0

确实为我工作!谢谢。 – aizquier

1

为了避免收到此错误,而试图删除外键,使用约束名而不是外键的列名

7

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

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

+2

它可以帮助我知道我的约束被创建为INDEX,而不是FOREIGN KEY。然后我使用了“DROP INDEX”条款。谢谢。 –

32

解决方案描述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`; 
    

这为我做。

+1

+1想补充一点,这里有很多问题(或许是重复的),而@bbrame的答案就是为我工作的答案。 –

+0

我没有显示约束部分创建表'名称',但是当我做desc'名字'我可以看到字段有外键约束 – proprius

+0

这是一个完美的例子,显示如何处理外键丢弃。许多人都感谢@bbframe。它为我工作。 – prashant

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` 

并检查外键名称,如果您遇到此类错误。