Mysql Error 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)

有什么想法吗,外国钥匙什么的?

137634 次浏览

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

我不是 DB 专家,但我认为我通过删除 fk,做我的 alter 表的东西,然后重做 fk 的东西,解决了这样一个问题(其中有一个 fk 约束)。

我很想知道结果是什么-有时 mysql 是相当神秘的。

它确实是一个外键错误,您可以使用 perror 查找:

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

为了找到更多关于失败的细节,您可以使用 SHOW ENGINE INNODB STATUS并查找最新的外键错误部分,它包含了关于错误的细节。

在您的例子中,最有可能的原因是某些内容引用了 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;

这对我总是有效:)

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

如果表使用 InnoDB 引擎,通常会得到这个错误。在这种情况下,必须删除外键,然后执行 alter 表并删除列。

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

显示创建表区域;

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

约束 region_ibfk_1外国 键(country_id)引用 删除号码 country(id) 对更新采取行动

现在只要发出一个:

更改表区域删除外键 region_ibfk_1;

最后是:

更改表区域删除列 国家 _ id;

你可以走了!

如果您正在使用像 MySQL Workbench 这样的客户端,右键单击要删除外键的所需表,然后选择外键选项卡并删除索引。

然后您可以像下面这样运行查询:

alter table table_name drop foreign_key_col_name;

只需在 drop 语句中使用‘ KEY’而不是‘ FOREIGNKEY’运行 alter 表查询。我希望它将有助于解决这个问题,并将删除外键约束,您可以更改表列并删除表。

ALTER TABLE slide_image_sub DROP  KEY  FK_slide_image_sub;

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

希望能有所帮助。

谢谢

可能还有另一个表具有外键,该外键引用您试图更改的主键。

要找出是哪个表导致了错误,可以运行 SHOW ENGINE INNODB STATUS,然后查看 LATEST FOREIGN KEY ERROR部分

使用 SHOWCREATETABLE 类别显示约束的名称。

最有可能的结果是 Category _ ibfk _ 1

使用该名称首先删除外键,然后删除列:

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

我以前也有过类似的问题。我从表 A 中删除了主键,但是当我试图从表 B 中删除外键列时,出现了同样的错误。

不能使用列名删除外键,如果要在 PHPMyAdmin 或 MySQL 中绕过外键,请在重命名或删除属性之前先删除外键约束。

在我的例子中,我使用的是 MySQL 工作台,在删除表中的一个列时遇到了同样的问题。我找不到外键的名称。为了解决这个问题,我采取了以下步骤:

  1. 点击你的模式,选择“模式检查器”,这样你就可以看到各种各样的表、列、索引等等。

  2. 转到名为“ Index”的选项卡,并在名为“ Column”的列下搜索列名。一旦找到该记录,请在列名“ Table”下检查表的名称。如果它与所需表的名称匹配,则从名为“ Name”的列中记下外键的名称。

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

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

我知道,这是一篇老文章,但是如果你正在寻找错误1025,那么它是每个人最喜欢的搜索引擎的第一个点击。

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

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

SET FOREIGN_KEY_CHECKS = 0;

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

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

SET FOREIGN_KEY_CHECKS = 1;

祝你好运。

做什么

SET FOREIGN_KEY_CHECKS=0;

在手术也能完成之前。

我在 MySQL 5.6中得到了这个错误,但它与外键无关。这是在 Windows7专业计算机上作为一个小型局域网上的服务器。

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

在我的示例中,应用程序使用4个 DDL 语句,一个 CREATETABLE 后跟3个 CREATEINDEX,没有外键。但是实际上只创建了2个索引和实际的表。在发生故障时,将 frm 文件重命名为。

我的解决方案是去掉单独的 CREATEINDEX 语句,并使用 CREATETABLE 语句创建它们。在写这篇文章的时候,这个问题已经为我和我的助手解决了,当其他人发现这个帖子的时候,他们挠了挠头。

平均收视率 = FOREACH 分组收视率 生成组作为电影 ID,平均收视率(收视率)作为平均收视率,计数(收视率)作为数字收视率;

如果您使用任何命令,如上所述,您必须使用小写字母组。这也许能解决你的问题,也解决了我的。至少在猪脚本里是这样的。