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

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 footable;

你会得到FK约束名称像

ProjectsInfo_ibfk_1

现在您需要移除这些限制。使用alter table命令

alter table ProjectsInfo drop foreign key ProjectsInfo_ibfk_1;

然后删除表列,

alter table ProjectsInfo drop column clientId;

其他回答

正如这里所解释的,似乎外键约束必须通过约束名而不是索引名来删除。

语法为:

ALTER TABLE footable DROP FOREIGN KEY fooconstraint;

这里有一种方法可以去掉外键约束。 ALTER TABLE location.location_id 删除外键location_ibfk_1

试试这个:

alter table Documents drop
  FK__Documents__Custo__2A4B4B5E

嘿,我按照上面的顺序, 找到了一些解。

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;

首先需要通过此查询获得实际的约束名称

SHOW CREATE TABLE TABLE_NAME

这个查询将约束外键的名称,现在下面的查询将删除它。

ALTER TABLE TABLE_NAME DROP FOREIGN KEY COLUMN_NAME_ibfk_1

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