无法删除外键(unable to drop the foreign key)

2019-06-24 13:17发布

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

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>

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



Answer 2:

描述的解决方案由克里斯·怀特在这里为我工作。

问题的根源是,MySQL的同时创建索引和外键。 两者都必须被移除(外键第一个相反的是克里斯说)。

  1. 节目制作与表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`; 

这为我做。



Answer 3:

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

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



Answer 4:

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



Answer 5:

你应该与外键的名称几经努力法希姆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`

并检查外键的名字,如果你得到这样的错误。



文章来源: unable to drop the foreign key