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

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):重命名时出错"

我怎样才能在上面的分配表中删除列而不得到这个错误?


当前回答

检查约束名称和外键名称:

SHOW CREATE TABLE table_name;

删除约束名和外键名:

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命令

alter table ProjectsInfo drop foreign key ProjectsInfo_ibfk_1;

然后删除表列,

alter table ProjectsInfo drop column clientId;

步骤1:创建vendor_locations表;

删除外键vendor_locations_ibfk_1;

这对我很管用。

检查约束名称和外键名称:

SHOW CREATE TABLE table_name;

删除约束名和外键名:

ALTER TABLE table_name
  DROP FOREIGN KEY the_name_after_CONSTRAINT,
  DROP KEY the_name_after_FOREIGN_KEY;

希望这能有所帮助!

如上所述,您可以轻松地删除一个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

不能删除外键列,因为它是由表assignmentStuff引用的。你应该先去掉外键约束assignmentstuff。assignmentidx。

这里已经有人提出了类似的问题。点击这里查看更多信息。