mysql错误1025(HY000):'./foo'(errorno:150)重命名错误是什么意思?

我在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) 

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

如果你的表使用InnoDB引擎,你通常会得到这个错误。 在这种情况下,您将不得不删除外键,然后执行alter table并删除该列。

但棘手的部分是,你不能使用列名删除外键,而是你必须find用来索引它的名字。 要find,请发出以下select:

SHOW CREATE TABLE区域;

这应该显示你的索引的名称,如下所示:

CONSTRAINT region_ibfk_1 FOREIGN KEY( country_id )REFERENCES countryid )ON DELETE NO ACTION ON UPDATE NO ACTION

现在只需发出一个:

alter table region drop foreign key region_ibfk_1 ;

最后一个:

alter table region drop column country_id;

你很好走!

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

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

要了解有关失败的更多详细信息,可以使用SHOW ENGINE INNODB STATUS并查找最新的FOREIGN KEY ERROR部分,其中包含有关错误的详细信息。

在你的情况,这很可能是因为引用country_id列的东西。

你也可以得到这个错误试图删除一个不存在的外键。 所以,当放弃外键时,一定要确保它们确实存在。

如果外键确实存在,并且仍然出现此错误,请尝试以下操作:

 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; 

这总是为我做的伎俩:)

只需在drop语句中使用'KEY'而不是'FOREIGN KEY'运行alter table查询。 我希望这将有助于解决问题,并会放弃外键约束,您可以更改表列和删除表。

 ALTER TABLE slide_image_sub DROP KEY FK_slide_image_sub; 

DROP KEY而不是DROP FOREIGN KEY

希望这会有所帮助。

谢谢

看看你的mysql数据库的错误文件。 根据错误#26305我的SQL不给你的原因。 这个错误存在自MySQL 4.1 😉

如果您使用的是像MySQL Workbench这样的客户端,请右键单击希望从中删除外键的表,然后select外键选项卡并删除索引。

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

 alter table table_name drop foreign_key_col_name; 

有可能是另一个表与外键引用您正在尝试更改的主键。

要找出哪个表导致错误,您可以运行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; 

我曾经有过类似的问题。 我从TABLE A中删除了主键,但是当我试图删除表BI中的外键列时,显示了上述相同的错误。

您不能使用列名称删除外键,并且在PHPMyAdmin或MySQL中绕过此外键,请在重命名或删除该属性之前首先除去外键约束。

我知道,这是一个旧post,但如果你正在寻找错误1025,那么这是所有人最喜欢的search引擎中的第一个。

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

在执行命令之前,首先必须使用以下命令禁用外键约束检查:

 SET FOREIGN_KEY_CHECKS = 0; 

那么你可以执行你的命令。

完成之后,请不要忘记使用以下命令再次启用外键约束检查:

 SET FOREIGN_KEY_CHECKS = 1; 

祝你好运。

 SET FOREIGN_KEY_CHECKS=0; 

行动之前也可以做的伎俩。

我猜猜外键约束问题。 country_id是否被用作另一个表中的外键?

我不是DB大师,但我想我解决了这样的问题(有一个FK约束)通过删除FK,做我的改变表的东西,然后重做FK的东西。

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

在我的情况下,我正在使用MySQL工作台,我面临同样的问题,同时删除我的列在一个表中。 我找不到外键的名字。 我按照以下步骤解决了这个问题:

  1. 室温。 点击你的模式并select“模式检查器”。 这给你各种表,列,索引等。

  2. 转到名为“索引”的选项卡,并search名为“列”的列下的列的名称。 一旦find,在列名“表”下检查该logging的表名。 如果它匹配所需表的名称,则记下名为“Name”的列中的外键名称。

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

  4. 现在你可以执行成功执行的drop语句。