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

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

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


当前回答

如果你的表使用InnoDB引擎,你通常会得到这个错误。在这种情况下,您必须删除外键,然后执行alter table并删除列。

但棘手的部分是不能使用列名删除外键,而是必须找到用于索引它的名称。要找到它,发出下面的select命令:

创建表区域 这应该会显示一个行,在左上角点击+选项,点击全文raio按钮,然后点击go。你会得到索引的名称,如下所示:

约束region_ibfk_1外键(country_id)引用国家(id) ON DELETE NO ACTION ON UPDATE NO ACTION 现在简单地发出一个:

删除表外键region_ibfk_1

or

更简单地输入:- 删除表TableName外键

记住唯一的事情就是在你的表名之后添加_ibfk_1,就像这样:- TableName_ibfk_1

其他回答

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

语法为:

ALTER TABLE footable DROP FOREIGN KEY fooconstraint;

试试这个:

alter table Documents drop
  FK__Documents__Custo__2A4B4B5E

步骤1:创建vendor_locations表;

删除外键vendor_locations_ibfk_1;

这对我很管用。

外键的存在是为了确保数据的完整性,所以只要列是外键的一部分,就不能删除它。你得先把钥匙放下。

我认为下面的查询可以做到:

ALTER TABLE assignmentStuff DROP FOREIGN KEY assignmentIDX;

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