我有一个表,其主键在其他几个表中使用,并有几个外键到其他表 .
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)时,它会给我一个错误 .
“ERROR 1025(HY000):重命名时出错”
如何在不发生此错误的情况下删除上面的分配表中的列?
9 回答
正如here所解释的那样,外键约束似乎必须被 constraint name 而不是索引名称删除 . 语法是:
外键用于确保数据完整性,因此只要它是外键的一部分,就不能删除列 . 你需要先放下钥匙 .
我认为以下查询会这样做:
如上所述,您可以轻松删除FK . 但是,我只是注意到有必要在某些时候删除KEY本身 . 如果您有任何错误消息要创建另一个索引(如最后一个),我的意思是使用相同的名称,删除与该索引相关的所有内容会很有用 .
检查CONSTRAINT名称和FOREIGN KEY名称:
删除CONSTRAINT名称和FOREIGN KEY名称:
希望这可以帮助!
这是一种删除外键约束的方法,它会起作用 . ALTER TABLE
location
.location_id
DROP FOREIGN KEYlocation_ibfk_1
;如果您的表使用InnoDB引擎,通常会出现此错误 . 在这种情况下,您必须删除外键,然后执行alter table并删除列 .
但棘手的部分是你不能使用列名删除外键,而是你必须找到用于索引它的名称 . 要找到它,请发出以下选择:
SHOW CREATE TABLE区域;这应该显示一行,在左上角单击选项,单击全文raio按钮然后单击go . 在那里你将获得索引的名称,如下所示:
CONSTRAINT region_ibfk_1 FOREIGN KEY(country_id)REFERENCES country(id)ON DELETE NO ACTION ON UPDATE NO ACTION现在只需发出:
alter table region drop外键region_ibfk_1;
要么
更简单的只需输入: - alter table TableName drop foreign key TableName_ibfk_1 ;
记住唯一的事情就是在你的tablename之后添加 _ibfk_1 ,如下所示: - TableName _ibfk_1
您不能删除外键列,因为它是从表
assignmentStuff
引用的 . 所以你应该首先删除外键约束assignmentStuff.assignmentIDX
.类似的问题已被提出here . 另请查看here了解更多信息 .
试试这个:
第1步:
show create table vendor_locations;
第2步:
ALTER TABLE vendor_locations drop foreign key vendor_locations_ibfk_1;
它对我有用 .