MySQL删除一些外键

我有一个表的主键在其他几个表中使用,并有几个外键到其他表。

CREATE TABLE location ( locationID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ... ) ENGINE = InnoDB; CREATE TABLE assignment ( assignmentID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, locationID INT NOT NULL, FOREIGN KEY locationIDX (locationID) REFERENCES location (locationID) ... ) ENGINE = InnoDB; CREATE TABLE assignmentStuff ( ... assignmentID INT NOT NULL, FOREIGN KEY assignmentIDX (assignmentID) REFERENCES assignment (assignmentID) ) ENGINE = InnoDB; 

问题是,当我试图放弃其中一个外键列(即locationIDX)它给了我一个“错误1025(HY000):错误重命名”错误。

如何在上面的赋值表中删除列而不会出现此错误?

正如这里所解释的,似乎外键约束必须由约束名称而不是索引名称来删除。 语法是:

 alter table footable drop foreign key fooconstraint 

外键在那里确保数据的完整性,所以只要它是外键的一部分就不能删除列。 您需要先放下钥匙。

我会认为下面的查询会做到这一点:

 ALTER TABLE assignmentStuff DROP FOREIGN KEY assignmentIDX; 

正如大家上面所说,你可以很容易地删除一个FK。 不过,我只注意到可能有必要在某个时候删除KEY本身。 如果您有任何错误消息来创build另一个像最后一个索引,我的意思是相同的名称,这将是有用的放弃与该索引相关的一切。

 ALTER TABLE your_table_with_fk drop FOREIGN KEY name_of_your_fk_from_show_create_table_command_result, drop KEY the_same_name_as_above 

这是一个放弃外键约束的方法,它会起作用。 ALTER TABLE locationlocation_id DROP FOREIGN KEY location_ibfk_1 ;

检查CONSTRAINT名称和FOREIGN KEY名称:

 SHOW CREATE TABLE table_name; 

删除CONSTRAINT名称和FOREIGN KEY名称:

 ALTER TABLE table_name DROP FOREIGN KEY the_name_after_CONSTRAINT, DROP KEY the_name_after_FOREIGN_KEY; 

希望这可以帮助!

如果你的表使用InnoDB引擎,你通常会得到这个错误。 在这种情况下,您将不得不删除外键,然后执行alter table并删除列。

但棘手的部分是,你不能使用列名删除外键,而是你必须find用来索引它的名字。 要find,请发出以下select:

SHOW CREATE TABLE区域; 这应该显示你一排,在左上angular点击+选项,点击全文raiobutton,然后点击去。你会得到索引的名称,如下所示:

CONSTRAINT region_ibfk_1 FOREIGN KEY(country_id)REFERENCES country(id)ON DELETE NO ACTION ON UPDATE NO ACTION现在简单地发出一个:

alter table region drop foreign key region_ibfk_1;

要么

更简单的只是键入: – alter table TableName drop foreign key TableName_ibfk_1 ;

记住唯一的事情就是添加_ibfk_1在你的表之后,就像这样: – TableName _ibfk_1

您不能删除外键列,因为它是从表assignmentStuff引用的。 所以你应该首先删除外键约束assignmentStuff.assignmentIDX

这里也有类似的问题。 也请查看这里获取更多信息。

尝试这个:

 alter table Documents drop FK__Documents__Custo__2A4B4B5E