MySQL删除一些外键

时间:2009-05-08 05:25:55

标签: mysql foreign-keys constraints mysql-error-1025

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

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):重命名错误”

如何在不出现此错误的情况下删除上面的分配表中的列?

11 个答案:

答案 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 locationlocation_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

已经提出了类似的问题here。另请查看here以获取更多信息。

答案 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

约束名称中的最后一个数字取决于表中有多少个外键