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

4

7 回答 7

140

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

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

于 2010-11-02T18:50:32.890 回答
33

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

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

ALTER TABLE `table_name` DROP INDEX `id_name_fk`;
于 2013-09-04T21:04:00.140 回答
24

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

于 2013-06-20T13:03:32.387 回答
13

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

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

于 2013-12-01T05:38:00.800 回答
5

如果您尝试删除作为 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`

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

于 2014-11-18T22:45:41.320 回答
4

我有这个问题,它是外键

单击Relation View(如下图所示),然后找到要删除的字段的名称,然后在Foreign key constraint (INNODB)列下,将选择设为空!表示没有外键

在此处输入图像描述

希望有效!

于 2016-02-29T06:37:34.500 回答
0

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

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

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

于 2016-11-18T07:32:58.067 回答