#1025 - 将“./database/#sql-2e0f_1254ba7”重命名为“./database/table”时出错(错误编号:150)

#1025 - Error on rename of './database/#sql-2e0f_1254ba7' to './database/table' (errno: 150)

提问人:Richard Knop 提问时间:11/3/2010 最后编辑:OMG PoniesRichard Knop 更新时间:7/2/2018 访问量:108087

问:

因此,我正在尝试将主键添加到数据库中的一个表中。现在它有一个主键,如下所示:

PRIMARY KEY (user_id, round_number)

其中 user_id 是外键。

我正在尝试将其更改为:

PRIMARY KEY (user_id, round_number, created_at)

我在phpmyadmin中通过单击表结构视图中的主键图标来执行此操作。

这是我收到的错误:

#1025 - Error on rename of './database/#sql-2e0f_1254ba7' to './database/table' (errno: 150)

它是一个带有 InnoDB 表引擎的 MySQL 数据库。

mysql sql phpmyadmin innodb mysql-error-1025

评论

1赞 Lekensteyn 11/3/2010
使用 Google 进行快速搜索后,我认为这个问题与约束有关。可能的有用链接:dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.htmlsimplicidade.org/notes/archives/2008/03/mysql_errno_150.html

答:

140赞 Ike Walker 11/3/2010 #1

可能还有另一个表,其中有一个外键引用了您尝试更改的主键。

要找出导致错误的表,您可以运行,然后查看该部分。SHOW ENGINE INNODB STATUSLATEST FOREIGN KEY ERROR

评论

2赞 Guilherme Ferreira 1/30/2018
就我而言,数据库是新创建的,根本没有表。
24赞 D_C 6/20/2013 #2

对于那些通过谷歌解决这个问题的人......如果您尝试重命名充当外键的字段,也可能发生此错误。

33赞 Wellington Lorindo 9/5/2013 #3

如前所述,您需要删除之前的 FK。在Mysql上,这样做是这样的:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;

ALTER TABLE `table_name` DROP INDEX `id_name_fk`;

评论

1赞 Ram Babu 2/21/2017
你的回答真的帮助了我。DROP FOREIGN KEY 解决了该问题。谢谢
1赞 Bancarel Valentin 6/22/2018
这也解决了我的问题,但同样的脚本在我的开发 MySQL 上工作。这是MySQL版本中更改的东西吗?
13赞 LazerSharks 12/1/2013 #4

要在 PHPMyAdmin 或 MySQL 中绕过此操作,请先删除外键约束,然后再重命名属性。

(对于 PHPMyAdmin 用户:要删除 PHPMyAdmin 中的 FK 约束,请选择该属性,然后单击表格结构下方工具栏中“打印视图”旁边的“关系视图”)

评论

1赞 MontrealDevOne 11/6/2014
我认为这是最准确的答案
5赞 Bonnie Varghese 11/19/2014 #5

如果您尝试删除作为 FOREIGN KEY 的列,则必须找到正确的名称,而不是列名。例如:如果我尝试删除 Alarms 表中的 server 字段,该字段是 servers 表的外键。

  1. SHOW CREATE TABLE alarm;寻找这条线。CONSTRAINT `server_id_refs_id_34554433` FORIEGN KEY (`server_id`) REFERENCES `server` (`id`)
  2. ALTER TABLE `alarm` DROP FOREIGN KEY `server_id_refs_id_34554433`;
  3. ALTER TABLE `alarm` DROP `server_id`

这将从 Alarms 表中删除外键服务器。

5赞 Mohammad Kermani 2/29/2016 #6

我有这个问题,它是外键的

单击“关系视图”(如下图所示),然后找到要删除的字段的名称,然后在“外键约束”(INNODB)列下,只需将选择放到任何位置即可!表示没有外键

enter image description here

希望能奏效!

0赞 StateLess 11/18/2016 #7

如果要添加外键并遇到此错误,则可能是子表中的值在父表中不存在。

假设对于必须添加外键的列,所有值都设置为 0,并且该值在您引用它的表中不可用。

您可以设置父表中存在的一些值,然后添加外键对我有用。