什么MySQL错误1025(HY000):在 './foo' 的命名错误(error

2019-08-31 06:57发布

我在mysql中尝试这样做:

mysql> alter table region drop column country_id;

而得到这个:

ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)

有任何想法吗? 外键的东西?

Answer 1:

如果你的表使用InnoDB引擎通常你得到这个错误。 在这种情况下,你就必须删除外键,然后执行ALTER TABLE和删除列。

但棘手的问题是,你不能删除使用列名外键,而是你必须找到用于索引它的名字。 地发现,发出以下选择:

SHOW CREATE TABLE区域;

这将显示索引,像这样的东西的名称:

约束region_ibfk_1外键( country_id )参考countryid )ON DELETE NO ACTION ON UPDATE NO ACTION

现在,只需发出:

修改表区域衰减外键region_ibfk_1 ;

最后一个:

改变表区域drop列COUNTRY_ID;

你是好去!



Answer 2:

这的确是一个外键的错误,你可以找出使用PERROR:

shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

要了解什么失败的更多详细信息,您可以用SHOW ENGINE INNODB STATUS ,并寻找它包含了什么是错的细节国外最新KEY错误部分。

你的情况,这是最有可能的原因是什么引用COUNTRY_ID列。



Answer 3:

你可以也出现此错误试图删除一个不存在的外键。 所以下降外键时,始终确保他们确实存在。

如果外键确实存在,而且仍然收到此错误请尝试以下操作:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

//此处删除外键!

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

这始终是卓有成效的,我:)



Answer 4:

只需用“KEY”,而不是在下降声明“的外键”运行ALTER TABLE查询。 我希望这将有助于解决这一问题,并会删除外键约束,你可以更改表列和删除表。

ALTER TABLE slide_image_sub DROP  KEY  FK_slide_image_sub;

在这里DROP KEY ,而不是DROP FOREIGN KEY

希望这将有助于。

谢谢



Answer 5:

我有一个类似的问题一次。 我删除从表A中的主键,但是当我试图删除表BI外键列被证明上述同样的错误。

不能删除使用列名,并在phpMyAdmin或使用MySQL来绕过这个外键,第一重命名或删除属性之前删除外键约束。



Answer 6:

我知道,这是旧的文章,但它是在每个人的喜爱的搜索引擎的第一击,如果你正在寻找错误1025。

然而,有一个简单的“黑客”为解决这个问题:

你执行你的命令(S)之前,你必须先关闭使用该命令外键约束检查:

SET FOREIGN_KEY_CHECKS = 0;

然后,你可以执行你的指令(S)。

设置完毕后,不要忘了启用外键约束再次检查,使用这个命令:

SET FOREIGN_KEY_CHECKS = 1;

祝你的努力。



Answer 7:

采取错误的文件来看看你的mysql数据库。 根据错误#26305我的SQL不给你的原因。 从MySQL 4.1中,此缺陷存在;-)



Answer 8:

如果您使用的是像MySQL工作台客户端,右键单击所需的表从那里的外键将被删除,然后选择外键选项卡并删除索引。

然后你可以运行这样的查询:

alter table table_name drop foreign_key_col_name;


Answer 9:

有可能是同一个外键引用您要更改主键的另一个表。

要找出哪些表引起您可以运行错误SHOW ENGINE INNODB STATUS ,然后看看LATEST FOREIGN KEY ERROR

使用SHOW CREATE TABLE类别显示约束的名称。

最有可能将categories_ibfk_1

使用名称来删除外键第一和列,则:

ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;


Answer 10:

SET FOREIGN_KEY_CHECKS=0;

在手术前也可以做的伎俩。



Answer 11:

我猜外键约束问题。 被COUNTRY_ID用作另一个表的外键?

我不是DB大师,但我想我解决了这样的问题(其中有一个FK约束)通过移除FK,做我的ALTER TABLE东西,然后重做FK东西。

我会很感兴趣地听到的结果是什么 - 有时是mysql相当神秘。



Answer 12:

就我而言,我是使用MySQL Workbench和我面临同样的问题,而在一个表格中加入我的专栏之一。 我找不到外键的名称。 我跟着下面的步骤来解决问题:

  1. 室温。 点击你的模式并选择“模式督察”。 这给你的各种表格,列,索引等。

  2. 转到名为“索引”选项卡,并命名为“栏”栏下搜索列的名称。 一旦发现检查表的名称列名“表”下这个纪录。 如果你想表的名称相匹配,然后记下名为“名称”列中的外键的名称。

  3. 现在执行查询:ALTER TABLE tableNamexx DROP KEY foreignKeyName;

  4. 现在,您可以执行哪些应成功执行drop语句。



Answer 13:

我得到这个错误与MySQL 5.6,但它没有任何关系与外键。 这是在Windows 7专业版的机器充当一个小型局域网的服务器。

客户端应用程序在做的是创建一个表与一些外部数据填充它,然后运行一个查询与永久表,然后去掉了“临时”表连接批量操作。 这批做这个大约300倍,这个特殊的程序已经运行一周周出了好几年,当我们突然得到了错误1025无法在该批次随机点重命名问题。

在我的情况下,应用程序是使用4个DDL语句CREATE TABLE后跟3 CREATE INDEX,没有任何外键。 然而,只有真正得到创建的索引和实际表.frm文件的2改名,在故障点。

我的解决办法是摆脱独立的CREATE INDEX语句和使用CREATE TABLE语句创建。 这在写作的时候已经解决了这个问题,我和我的帮助别人摸不到头,当他们发现这个线程。



文章来源: What does mysql error 1025 (HY000): Error on rename of './foo' (errorno: 150) mean?