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

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

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

有可能是另一个表与外键引用您正在尝试更改的主键。

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

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

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

对于那些通过谷歌来得到这个问题…如果您尝试重命名作为外键的字段也可能会发生此错误。

要在PHPMyAdmin或MySQL中绕过这一点,请在重命名属性之前首先除去外键约束。

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

如果您试图删除一个属于FOREIGN KEY的列,则必须find不是列名的正确名称。 例如:如果我试图删除服务器表的外键警报表中的服务器字段。

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

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

我有这个问题,这是外键

点击Relation View (如下图),然后find你要删除它的字段的名称,并Foreign key constraint (INNODB)列,只要把select什么都没有! 意味着没有外键

在这里输入图像说明

希望工程!

如果您正在添加一个外键并面临此错误,则可能是子表中的值不在父表中。

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

你可以设置一些父表中存在的值,然后添加外键为我工作。