我在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)
有任何想法吗? 外键的东西?
我在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区域;
这将显示索引,像这样的东西的名称:
约束
region_ibfk_1
外键(country_id
)参考country
(id
)ON DELETE NO ACTION ON UPDATE NO ACTION
现在,只需发出:
修改表区域衰减外键
region_ibfk_1
;
最后一个:
改变表区域drop列COUNTRY_ID;
你是好去!
这的确是一个外键的错误,你可以找出使用PERROR:
shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed
要了解什么失败的更多详细信息,您可以用SHOW ENGINE INNODB STATUS
,并寻找它包含了什么是错的细节国外最新KEY错误部分。
你的情况,这是最有可能的原因是什么引用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;
这始终是卓有成效的,我:)
只需用“KEY”,而不是在下降声明“的外键”运行ALTER TABLE查询。 我希望这将有助于解决这一问题,并会删除外键约束,你可以更改表列和删除表。
ALTER TABLE slide_image_sub DROP KEY FK_slide_image_sub;
在这里DROP KEY
,而不是DROP FOREIGN KEY
,
希望这将有助于。
谢谢
我有一个类似的问题一次。 我删除从表A中的主键,但是当我试图删除表BI外键列被证明上述同样的错误。
不能删除使用列名,并在phpMyAdmin或使用MySQL来绕过这个外键,第一重命名或删除属性之前删除外键约束。
我知道,这是旧的文章,但它是在每个人的喜爱的搜索引擎的第一击,如果你正在寻找错误1025。
然而,有一个简单的“黑客”为解决这个问题:
你执行你的命令(S)之前,你必须先关闭使用该命令外键约束检查:
SET FOREIGN_KEY_CHECKS = 0;
然后,你可以执行你的指令(S)。
设置完毕后,不要忘了启用外键约束再次检查,使用这个命令:
SET FOREIGN_KEY_CHECKS = 1;
祝你的努力。
采取错误的文件来看看你的mysql数据库。 根据错误#26305我的SQL不给你的原因。 从MySQL 4.1中,此缺陷存在;-)
如果您使用的是像MySQL工作台客户端,右键单击所需的表从那里的外键将被删除,然后选择外键选项卡并删除索引。
然后你可以运行这样的查询:
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;
干
SET FOREIGN_KEY_CHECKS=0;
在手术前也可以做的伎俩。
我猜外键约束问题。 被COUNTRY_ID用作另一个表的外键?
我不是DB大师,但我想我解决了这样的问题(其中有一个FK约束)通过移除FK,做我的ALTER TABLE东西,然后重做FK东西。
我会很感兴趣地听到的结果是什么 - 有时是mysql相当神秘。
就我而言,我是使用MySQL Workbench和我面临同样的问题,而在一个表格中加入我的专栏之一。 我找不到外键的名称。 我跟着下面的步骤来解决问题:
室温。 点击你的模式并选择“模式督察”。 这给你的各种表格,列,索引等。
转到名为“索引”选项卡,并命名为“栏”栏下搜索列的名称。 一旦发现检查表的名称列名“表”下这个纪录。 如果你想表的名称相匹配,然后记下名为“名称”列中的外键的名称。
现在执行查询:ALTER TABLE tableNamexx DROP KEY foreignKeyName;
现在,您可以执行哪些应成功执行drop语句。
我得到这个错误与MySQL 5.6,但它没有任何关系与外键。 这是在Windows 7专业版的机器充当一个小型局域网的服务器。
客户端应用程序在做的是创建一个表与一些外部数据填充它,然后运行一个查询与永久表,然后去掉了“临时”表连接批量操作。 这批做这个大约300倍,这个特殊的程序已经运行一周周出了好几年,当我们突然得到了错误1025无法在该批次随机点重命名问题。
在我的情况下,应用程序是使用4个DDL语句CREATE TABLE后跟3 CREATE INDEX,没有任何外键。 然而,只有真正得到创建的索引和实际表.frm文件的2改名,在故障点。
我的解决办法是摆脱独立的CREATE INDEX语句和使用CREATE TABLE语句创建。 这在写作的时候已经解决了这个问题,我和我的帮助别人摸不到头,当他们发现这个线程。