我在mysql中试过这个:
mysql> alter table region drop column country_id;
得到了这个:
ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to './product/region' (errno: 150)
有任何想法吗?外键的东西?
如果您的表使用InnoDB引擎,通常会出现此错误.在这种情况下,您必须删除外键,然后执行alter table并删除列.
但棘手的部分是你不能使用列名删除外键,而是你必须找到用于索引它的名称.要找到它,请发出以下选择:
SHOW CREATE TABLE区域;
这应该显示索引的名称,如下所示:
CONSTRAINT
region_ibfk_1
FOREIGN KEY(country_id
)REFERENCEScountry
(id
)在更新时不执行任何操作
现在只需发出:
alter table region drop foreign key
region_ibfk_1
;
最后一个:
alter table region drop column country_id;
你很高兴去!
这确实是一个外键错误,你可以找出使用perror:
shell$ perror 150 MySQL error code 150: Foreign key constraint is incorrectly formed
要查找有关失败的更多详细信息,您可以使用SHOW ENGINE INNODB STATUS
并查找最新的FOREIGN KEY ERROR部分,其中包含有关错误的详细信息.
在您的情况下,很可能导致某些内容引用country_id列.
尝试删除不存在的外键时,也会出现此错误.因此,在删除外键时,请务必确保它们确实存在.
如果外键确实存在,并且您仍然遇到此错误,请尝试以下操作:
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
//在这里删除外键!
SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
这总是对我有把戏:)
只需在drop语句中使用'KEY'而不是'FOREIGN KEY'运行alter table查询.我希望它有助于解决问题,并将删除外键约束,您可以更改表列并删除表.
ALTER TABLE slide_image_sub DROP KEY FK_slide_image_sub;
在这里DROP KEY
,而不是DROP FOREIGN KEY
,
希望它会有所帮助.
谢谢