#1025 - 更名 './database/#sql-2e0f_1254ba7' 为 './database/table' 错误 (错误码: 150)

84

我正在尝试向我的数据库中的一个表格添加主键。目前它有一个像这样的主键:

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数据库。


1
通过谷歌快速搜索,我得到的想法是这个问题与约束有关。可能有用的链接:http://dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.html 和 http://www.simplicidade.org/notes/archives/2008/03/mysql_errno_150.html - Lekensteyn
7个回答

140

你尝试更改的主键可能被另一个表格的外键引用。

要找出导致错误的表格,可以运行SHOW ENGINE INNODB STATUS命令,然后查看LATEST FOREIGN KEY ERROR部分。


2
在我的情况下,数据库是全新创建的,没有任何表。 - Guilherme Ferreira

33

就像之前所说的那样,你需要先删除外键。在MySQL上,可以按照以下方式进行操作:

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

ALTER TABLE `table_name` DROP INDEX `id_name_fk`;

1
你的回答真的帮了我很多。DROP FOREIGN KEY解决了这个问题。谢谢。 - Ram Babu
1
这也解决了我的问题,但是同样的脚本在我开发的MySQL上是可以工作的。这是MySQL版本中改变的事情吗? - Bancarel Valentin

24

对于通过谷歌进入这个问题的人们... 如果您尝试重命名充当外键的字段,也可能会出现此错误。


13

要在PHPMyAdmin或MySQL中绕过此问题,首先需要在重命名属性之前删除外键约束。

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


1
我认为这是最准确的答案。 - MontrealDevOne

5
如果您想删除一个FOREIGN KEY列,您必须找到正确的名称,而不是列名。例如,如果我要在警报表中删除作为外键服务器表的服务器字段。

  1. SHOW CREATE TABLE alarm; 查找CONSTRAINT `server_id_refs_id_34554433` FOREIGN 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表中删除foreign key server。


5

我遇到了这个问题,它与外键有关。

点击关系视图(如下图所示),然后找到要删除的字段名称,在外键约束(INNODB)列下,只需选择不选任何内容!表示没有外键。

enter image description here

希望这能解决您的问题!


0
如果您正在添加外键并遇到此错误,则可能是子表中的值不存在于父表中。
假设要添加外键的列所有值都设置为0,而该值在您引用的表中不可用。
您可以设置一些存在于父表中的值,然后对我来说,添加外键就可以了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接