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


81

因此,我试图向数据库中的一个表添加主键。现在,它具有这样的主键:

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
使用Google快速搜索后,我发现此问题与约束条件有关。可能有用的链接:dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.htmlsimplicidade.org/notes/archives/2008/03/mysql_errno_150.html
Lekensteyn

Answers:


138

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

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


2
在我的情况下,数据库是新创建的,根本没有表。
Guilherme Ferreira

33

如前所述,您需要先删除FK。在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 S

1
这也解决了我的问题,但是相同的脚本正在我的开发MySQL上运行。这在MySQL版本中是否已更改?
Bancarel Valentin

24

对于那些通过google提出此问题的人...如果您尝试重命名充当外键的字段,也会发生此错误。


13

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

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


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

4

如果要删除作为FOREIGN KEY的列,则必须找到正确的名称,而不是该列的名称。例如:如果我要删除“警报”表中的服务器字段,这是服务器表的外键。

  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`

这将从“警报”表中删除外键服务器。


4

我有这个问题,是针对外键的

单击Relation View(如下面的图像所示),然后找到要删除它的字段的名称,然后在该Foreign key constraint (INNODB)列下,将选择内容一无所有!表示没有外键

在此处输入图片说明

希望行得通!


0

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.