我有一个表,其主键在其他几个表中使用,并且有几个外键到其他表。
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):重命名错误”
如何在不出现此错误的情况下删除上面的分配表中的列?
答案 0 :(得分:406)
正如here所解释的那样,外键约束似乎必须通过约束名称而不是索引名称来删除。语法是:
alter table footable drop foreign key fooconstraint
答案 1 :(得分:21)
外键用于确保数据完整性,因此只要它是外键的一部分,就不能删除列。你需要先放下钥匙。
我认为以下查询会这样做:
ALTER TABLE assignmentStuff DROP FOREIGN KEY assignmentIDX;
答案 2 :(得分:14)
如上所述,您可以轻松删除FK。但是,我只是注意到有必要在某些时候删除KEY本身。如果您有任何错误消息要创建另一个索引(如最后一个),我的意思是使用相同的名称,删除与该索引相关的所有内容将非常有用。
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
答案 3 :(得分:8)
检查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;
希望这有帮助!
答案 4 :(得分:3)
这是一种删除外键约束的方法,它会起作用。
ALTER TABLE location
。location_id
DROP FOREIGN KEY location_ibfk_1
;
答案 5 :(得分: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 foreign key region_ibfk_1;
或
更简单地输入: - alter table TableName drop foreign key TableName_ibfk_1 ;
记住,唯一的办法就是在你的tablename之后添加 _ibfk_1 ,如下所示: - TableName _ibfk_1
答案 6 :(得分:0)
您不能删除外键列,因为它是从表assignmentStuff
引用的。因此,您应首先删除外键约束assignmentStuff.assignmentIDX
。
答案 7 :(得分:0)
试试这个:
alter table Documents drop
FK__Documents__Custo__2A4B4B5E
答案 8 :(得分:0)
第1步:show create table vendor_locations;
第二步:ALTER TABLE vendor_locations drop foreign key vendor_locations_ibfk_1;
它为我工作。
答案 9 :(得分:0)
嘿,我按照上面的顺序进行了操作, 并找到了解决方案。
SHOW CREATE TABLE footable;
您将获得FK约束名称,例如
ProjectsInfo_ibfk_1
现在,您需要删除此约束。通过alter table commantd
alter table ProjectsInfo drop foreign key ProjectsInfo_ibfk_1;
然后删除表格列
alter table ProjectsInfo drop column clientId;
答案 10 :(得分:0)
首先需要通过此查询获取实际的约束名称
SHOW CREATE TABLE TABLE_NAME
此查询将导致外键的约束名称,现在在查询下方将其删除。
ALTER TABLE TABLE_NAME DROP FOREIGN KEY COLUMN_NAME_ibfk_1
约束名称中的最后一个数字取决于表中有多少个外键