首页 文章

MySQL删除一些外键

提问于
浏览
158

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

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

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

9 回答

  • 0

    正如here所解释的那样,外键约束似乎必须被 constraint name 而不是索引名称删除 . 语法是:

    alter table footable drop foreign key fooconstraint
    
  • 390

    外键用于确保数据完整性,因此只要它是外键的一部分,就不能删除列 . 你需要先放下钥匙 .

    我认为以下查询会这样做:

    ALTER TABLE assignmentStuff DROP FOREIGN KEY assignmentIDX;
    
  • 3

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

    检查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;
    

    希望这可以帮助!

  • 14

    这是一种删除外键约束的方法,它会起作用 . ALTER TABLE location . location_id DROP FOREIGN KEY location_ibfk_1 ;

  • 21

    如果您的表使用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外键region_ibfk_1;

    要么

    更简单的只需输入: - alter table TableName drop foreign key TableName_ibfk_1 ;

    记住唯一的事情就是在你的tablename之后添加 _ibfk_1 ,如下所示: - TableName _ibfk_1

  • 0

    您不能删除外键列,因为它是从表 assignmentStuff 引用的 . 所以你应该首先删除外键约束 assignmentStuff.assignmentIDX .

    类似的问题已被提出here . 另请查看here了解更多信息 .

  • 8

    试试这个:

    alter table Documents drop
      FK__Documents__Custo__2A4B4B5E
    
  • 1

    第1步: show create table vendor_locations;

    第2步: ALTER TABLE vendor_locations drop foreign key vendor_locations_ibfk_1;

    它对我有用 .

相关问题