mysql error 1025 (HY000): Error on rename of './foo' (errorno: 150) 是啥意思?

Posted

技术标签:

【中文标题】mysql error 1025 (HY000): Error on rename of \'./foo\' (errorno: 150) 是啥意思?【英文标题】:What does mysql error 1025 (HY000): Error on rename of './foo' (errorno: 150) mean?mysql error 1025 (HY000): Error on rename of './foo' (errorno: 150) 是什么意思? 【发布时间】:2010-09-14 16:26:36 【问题描述】:

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

有什么想法吗?外键的东西?

【问题讨论】:

@skiphoppy - 您是否要为已经给出的答案提供赏金?这甚至允许吗?还是您的情况不同,在这种情况下您应该启动另一个线程? @RickJames 是的。但是,skiphoppy 应该在她选择的答案下添加她的评论,因为赏金结束后赏金消息将消失。 【参考方案1】:

如果您的表使用 InnoDB 引擎,您通常会收到此错误。在这种情况下,您必须删除外键,然后执行更改表并删除列。

但棘手的部分是您不能使用列名删除外键,而是必须找到用于索引它的名称。要找到它,请发出以下选择:

显示创建表区域;

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

约束region_ibfk_1 外国 关键 (country_id) 参考 country (id) 删除否 更新操作无操作

现在只需发出:

alter table region 删除外键 region_ibfk_1;

最后是:

更改表区域删除列 country_id;

你很高兴!

【讨论】:

请注意,您也可以在一个 ALTER TABLE 查询中删除外键和列; 不错!我们应该放弃外键,一切都会好起来的!谢谢!【参考方案2】:

确实是外键错误,用perror可以查出来:

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

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

在您的情况下,很可能是因为某些内容正在引用 country_id 列。

【讨论】:

再一次,另一个误导性的 MySQL 显示错误...谢谢。 phpMyAdmin中可以在Storage EnginesInnoDBInnoDB Status中找到引擎的状态跨度> 【参考方案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;

这总是对我有用:)

【讨论】:

我在切换到表的不同字符集时需要这个,因为 mysql 错误:ERROR 1025 (HY000): Error on rename of './table/#sql-14ae_81' to (错误号:150)【参考方案4】:

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

ALTER TABLE slide_image_sub DROP  KEY  FK_slide_image_sub;

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

希望它会有所帮助。

谢谢

【讨论】:

【参考方案5】:

我知道,这是一篇旧帖子,但如果您正在寻找错误 1025,它是每个人最喜欢的搜索引擎上的第一次点击。

但是,有一个简单的“破解”方法可以解决此问题:

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

SET FOREIGN_KEY_CHECKS = 0;

然后你就可以执行你的命令了。

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

SET FOREIGN_KEY_CHECKS = 1;

祝你工作顺利。

【讨论】:

在 xampp 上安装 octobercms 时遇到问题,终于有帮助了。【参考方案6】:

我曾经遇到过类似的问题。我从表 A 中删除了主键,但是当我试图从表 B 中删除外键列时,出现了上述相同的错误。

您不能使用列名删除外键,要在 PHPMyAdmin 或 MySQL 中绕过这一点,请先删除外键约束,然后再重命名或删除属性。

【讨论】:

【参考方案7】:

查看 mysql 数据库的错误文件。根据Bug #26305我的sql不给你原因。这个错误从 MySQL 4.1 开始就存在 ;-)

【讨论】:

我发现您的一些答案难以理解,但 +1 用于链接到错误报告。显然,它现在已在 MySQL v5.6.6 中修复。 :)【参考方案8】:

如果您使用的是 MySQL Workbench 之类的客户端,请右键单击要从中删除外键的所需表,然后选择外键选项卡并删除索引。

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

alter table table_name drop foreign_key_col_name;

【讨论】:

【参考方案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;

【讨论】:

【参考方案10】:

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

我不是数据库专家,但我认为我通过删除 fk、执行更改表内容然后重做 fk 内容解决了这样的问题(存在 fk 约束)。

我很想知道结果是什么 - 有时 mysql 非常神秘。

【讨论】:

Mysql 可能很糟糕。通常很好,但是那些错误消息,哎呀。如果我们从办公室的某个人那里得到一个简明的解释,我会把它扔在这里。【参考方案11】:

在我的例子中,我使用的是 MySQL 工作台,并且在将我的一列放入表中时遇到了同样的问题。我找不到外键的名称。我按照以下步骤解决了这个问题:

    室温。单击您的架构并选择“架构检查器”。这为您提供了各种表、列、索引等。

    转到名为“索引”的选项卡并在名为“列”的列下搜索列的名称。找到后,在列名“表”下检查该记录的表名。如果它与您想要的表的名称匹配,则记下名为“名称”的列中的外键名称。

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

    现在可以执行 drop 语句,应该会成功执行。

【讨论】:

【参考方案12】:

在做

SET FOREIGN_KEY_CHECKS=0;

在操作之前也可以做到这一点。

【讨论】:

【参考方案13】:

我在 MySQL 5.6 中遇到了这个错误,但它与外键无关。这是在 Windows 7 Professional 机器上充当小型 LAN 上的服务器。

客户端应用程序正在执行一个批处理操作,该操作创建一个表并用一些外部数据填充它,然后运行一个与永久表连接的查询,然后删除“临时”表。这批执行此操作大约 300 次,这个特定的例程已经连续运行了好几年,突然我们在批次中的随机点收到错误 1025 无法重命名问题。

在我的例子中,应用程序使用了 4 个 DDL 语句,一个 CREATE TABLE,后跟 3 个 CREATE INDEX,没有外键。然而,实际上只有 2 个索引被创建,并且实际的表 .frm 文件在发生故障时被重命名。

我的解决方案是摆脱单独的 CREATE INDEX 语句并使用 CREATE TABLE 语句创建它们。在撰写本文时,这已经为我解决了这个问题,我帮助其他人在找到这个线程时摸不着头脑。

【讨论】:

【参考方案14】:

averageRatings= FOREACH groupedRatings GENERATE group AS movieID, AVG(ratings.rating) AS avgRating, COUNT(ratings.rating) AS numRatings;

如果您使用上述任何命令,则必须使用小写字母组。这可能会解决你的问题,它解决了我的问题。至少在 PIG 脚本中。

【讨论】:

我认为这与问题无关,他或她遇到了 mysql 问题

以上是关于mysql error 1025 (HY000): Error on rename of './foo' (errorno: 150) 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL ERROR 1356 (HY000)

mysql ERROR 1396(HY000)

mysql - ERROR 1114 (HY000): The table is full

MySQL关于ERROR 1290 (HY000)报错

MySQL报错ERROR1872(HY000):Slave failed to initialize

MySQL : ERROR 1215 (HY000): 无法添加外键约束