我有一个表,它的主键用于其他几个表,并且有几个外键到其他表。
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):重命名错误”
如何在不出现此错误的情况下删除上面分配表中的列?
正如 here 所解释的,似乎 foreign key 约束必须由 constraint name 而不是 index 名称删除。
语法是:
ALTER TABLE footable DROP FOREIGN KEY fooconstraint;
外键用于确保数据完整性,因此只要列是外键的一部分,就不能删除它。您需要先放下钥匙。
我认为以下查询会做到这一点:
ALTER TABLE assignmentStuff DROP FOREIGN KEY assignmentIDX;
正如上面每个人所说,您可以轻松删除 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
检查什么是 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;
希望这可以帮助!
嘿,我按照上面的一些顺序,找到了一些解决方案。
SHOW CREATE TABLE footable;
您将获得 FK 约束名称,例如
ProjectsInfo_ibfk_1
现在您需要删除此约束。通过更改表命令
alter table ProjectsInfo drop foreign key ProjectsInfo_ibfk_1;
然后删除表格列,
alter table ProjectsInfo drop column clientId;
这是一种删除外键约束的方法,它会起作用。更改表 location
。location_id
删除外键 location_ibfk_1
;
如果您的表使用 InnoDB 引擎,您通常会收到此错误。在这种情况下,您必须删除外键,然后执行更改表并删除列。
但棘手的部分是您不能使用列名删除外键,而是必须找到用于索引它的名称。要找到它,请发出以下选择:
显示创建表区域;这应该会显示一行,在左上角单击 + 选项,单击全文 raio 按钮,然后单击 go。您将获得索引的名称,如下所示:
CONSTRAINT region_ibfk_1 FOREIGN KEY (country_id) REFERENCES country (id) ON DELETE NO ACTION ON UPDATE NO ACTION 现在只需发出:
更改表区域删除外键 region_ibfk_1;
或者
更简单,只需键入:- alter table TableName drop foreign key TableName_ibfk_1;
记住唯一的事情是在你的表名之后添加 _ibfk_1 来制作这样的:- TableName_ibfk_1
尝试这个:
alter table Documents drop
FK__Documents__Custo__2A4B4B5E
第 1 步:show create table vendor_locations;
第 2 步:ALTER TABLE vendor_locations drop foreign key vendor_locations_ibfk_1;
它对我有用。
首先需要通过此查询获取实际的约束名称
SHOW CREATE TABLE TABLE_NAME
此查询将导致外键名称的约束,现在下面的查询将删除它。
ALTER TABLE TABLE_NAME DROP FOREIGN KEY COLUMN_NAME_ibfk_1
上面约束名称中的最后一个数字取决于表中有多少外键
SHOW CREATE TABLE footable;
查看约束的名称。它本身不是列的名称。感谢你的回答!