2010-11-02 43 views
69

所以我试图添加一个主键到我的数据库中的一个表。现在它有一个这样的主键:#1025 - 将'./database/#sql-2e0f_1254ba7'重命名为'./database/table'错误(错误: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) 

这是一个MySQL数据库InnoDB表引擎。

+1

使用Google进行快速搜索会让我觉得这个问题与约束有关。可能有用的链接: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 2010-11-02 18:01:55

回答

124

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

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

+0

在我的情况下,数据库是新创建的,根本没有表。 – 2018-01-30 01:37:44

20

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

28

正如你所说,你需要删除之前的FKs。在MySQL做这样的:

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

ALTER TABLE `table_name` DROP INDEX `id_name_fk`; 
+1

你的回答确实帮了我。 DROP FOREIGN KEY解决了这个问题。谢谢 – 2017-02-21 11:35:12

13

要在phpMyAdmin或使用MySQL绕过此,重命名属性之前先删除外键约束。

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

+1

我认为这是最准确的答案 – MontrealDevOne 2014-11-05 19:36:13

3

如果你想删除列是一个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`

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

3

我有这个问题,它是外键

点击Relation View(如下图),然后找到你要删除的字段的名称,并根据Foreign key constraint (INNODB)列,只需将选择设置为无!意味着没有外键

enter image description here

希望的作品!

0

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

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

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