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 location
。 location_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