MySQL在删除索引时出现错误(errno 150)

8

我在删除外键索引时遇到了问题,总是收到相同的错误提示。

 ALTER TABLE `comments` DROP INDEX `id_user`  

输出结果
 1025 - Error on rename of './postuj_cz1/#sql-d834_a0c704' 
 to './postuj_cz1/comments' (errno: 150) 

另一张表上的id_user是简单的主键索引。 我正在使用MySQL 5.0.85版本。

1
首先尝试删除表中的所有外键。 - David Andres
实际上,我没有将任何外键与该表关联。 - Jakub Arnold
4个回答

13

还有其他原因。例如,我有一个涉及两个独立外键列的唯一索引。在删除唯一索引之前,我必须删除相关的外键。(显然,您可以在之后重新添加外键。)


1
谢谢,那就是我的问题所在。 - nightcoder
删除唯一索引导致我的外键引用了一个“非唯一”字段,这是不可能的。 - Yannick Richard

6

INNODB:这可能只是在删除索引之前删除关系的简单操作。


1
关系在我的情况下锁定了一切。因此,先移除关系,接着移除索引,再创建新的索引,最后恢复关系。 - Vaseltior

2

该索引是'user'表上的外键索引,因此首先尝试运行以下命令:

SHOW CREATE TABLE my_table

找到与外键索引对应的约束名,然后尝试使用以下命令:

ALTER TABLE my_table DROP FOREIGN KEY FK_myconstraintcode

警告:如果您尝试使用外键名称删除外键,您将会遇到错误!


这对我来说是一个很好的解决方案,似乎无法使用“drop index”语句删除外键。 - TheGabiRod

2
根据此链接所述,该错误与主键字段的定义有关,而不是外键索引。
检查COMMENTS表的主键是否没有UNSIGNED关键字,而COMMENTS.id_user外键却有。这个关键字导致了问题——字段类型不一致。
要修复此问题,可以在COMMENTS表的主键定义中添加UNSIGNED关键字,或从外键定义中删除UNSIGNED关键字...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接