mysql错误1025(HY000):'./foo'(errorno:150)重命名错误是什么意思?
我在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并删除该列。
但棘手的部分是,你不能使用列名删除外键,而是你必须find用来索引它的名字。 要find,请发出以下select:
SHOW CREATE TABLE区域;
这应该显示你的索引的名称,如下所示:
CONSTRAINT
region_ibfk_1
FOREIGN KEY(country_id
)REFERENCEScountry
(id
)ON DELETE NO ACTION ON UPDATE NO ACTION
现在只需发出一个:
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
,
希望这会有所帮助。
谢谢
看看你的mysql数据库的错误文件。 根据错误#26305我的SQL不给你的原因。 这个错误存在自MySQL 4.1 😉
如果您使用的是像MySQL Workbench这样的客户端,请右键单击希望从中删除外键的表,然后select外键选项卡并删除索引。
然后你可以像这样运行查询:
alter table table_name drop foreign_key_col_name;
有可能是另一个表与外键引用您正在尝试更改的主键。
要找出哪个表导致错误,您可以运行SHOW ENGINE INNODB
STATUS
,然后查看LATEST FOREIGN KEY ERROR
部分
使用SHOW CREATE TABLE类别显示约束的名称。
最有可能的将是categories_ibfk_1
使用名称先删除外键,然后再删除列:
ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1; ALTER TABLE categories DROP COLUMN assets_id;
我曾经有过类似的问题。 我从TABLE A中删除了主键,但是当我试图删除表BI中的外键列时,显示了上述相同的错误。
您不能使用列名称删除外键,并且在PHPMyAdmin或MySQL中绕过此外键,请在重命名或删除该属性之前首先除去外键约束。
我知道,这是一个旧post,但如果你正在寻找错误1025,那么这是所有人最喜欢的search引擎中的第一个。
然而,解决这个问题有一个简单的“黑客”:
在执行命令之前,首先必须使用以下命令禁用外键约束检查:
SET FOREIGN_KEY_CHECKS = 0;
那么你可以执行你的命令。
完成之后,请不要忘记使用以下命令再次启用外键约束检查:
SET FOREIGN_KEY_CHECKS = 1;
祝你好运。
干
SET FOREIGN_KEY_CHECKS=0;
行动之前也可以做的伎俩。
我猜猜外键约束问题。 country_id是否被用作另一个表中的外键?
我不是DB大师,但我想我解决了这样的问题(有一个FK约束)通过删除FK,做我的改变表的东西,然后重做FK的东西。
我会有兴趣听到结果是什么 – 有时mysql是相当神秘的。
在我的情况下,我正在使用MySQL工作台,我面临同样的问题,同时删除我的列在一个表中。 我找不到外键的名字。 我按照以下步骤解决了这个问题:
-
室温。 点击你的模式并select“模式检查器”。 这给你各种表,列,索引等。
-
转到名为“索引”的选项卡,并search名为“列”的列下的列的名称。 一旦find,在列名“表”下检查该logging的表名。 如果它匹配所需表的名称,则记下名为“Name”的列中的外键名称。
-
现在执行查询:ALTER table tableNamexx DROP KEY foreignKeyName;
-
现在你可以执行成功执行的drop语句。