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

时间:2010-11-02 17:55:18

标签: mysql sql phpmyadmin innodb mysql-error-1025

所以我试图将一个主键添加到我的数据库中的一个表。现在它有一个这样的主键:

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

7 个答案:

答案 0 :(得分:133)

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

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

答案 1 :(得分:31)

正如所说,你需要先移除FK。在Mysql上这样做:

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

ALTER TABLE `table_name` DROP INDEX `id_name_fk`;

答案 2 :(得分:22)

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

答案 3 :(得分:13)

要在PHPMyAdmin或MySQL中绕过此功能,请在重命名属性之前先删除外键约束。

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

答案 4 :(得分:4)

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

  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. 这将从Alarms表中删除外键服务器。

答案 5 :(得分:4)

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

点击 Relation View (如下图所示),然后找到要删除的字段的名称,并在 Foreign key constraint (INNODB)专栏,只是把选择放到了什么!意味着没有外键

enter image description here

希望有效!

答案 6 :(得分:0)

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

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

您可以设置父表中存在的某个值,然后添加为我工作的外键。