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