【问题标题】:unable to drop the foreign key无法删除外键
【发布时间】:2012-05-17 08:57:39
【问题描述】:

我想在我的表中删除外键,但出现此错误消息

mysql> alter table customers drop foreign key customerid;
ERROR 1025 (HY000): Error on rename of '.\products\customers' to '.\products\#sql2-7ec-a3' (errno: 152)
mysql>

【问题讨论】:

  • 这可以帮助你理解stackoverflow.com/questions/160233/…
  • @Imdad 此链接描述了另一个错误 - (errno: 150)
  • 试试这个。创建新表(没有外键约束)。将数据复制到新表(使用语法 INSERT INTO new_table SELECT * FROM old_table)删除旧表
  • 你检查过@Maksym Polshcha 的答案吗?您必须使用外键的名称而不是列名。 (可能类似于 fk_customerid)
  • 检查我的答案,如果您仍有问题,请告诉我...

标签: mysql foreign-keys foreign-key-relationship mysql-error-1025


【解决方案1】:

here by Chris White 描述的解决方案对我有用。

根本问题是 MySQL 同时创建了一个索引和一个外键。两者都必须删除(外键首先与克里斯所说的相反)。

  1. 显示创建表table_name;

    SHOW CREATE TABLE `table_name`:
    
    | table_name | CREATE TABLE `table_name` (
      `id` int(20) unsigned NOT NULL auto_increment,
      `key_column` smallint(5) unsigned default '1',
      KEY `column_tablein_26440ee6` (`key_column`),  <--- shows key name
      CONSTRAINT `table_name_ibfk_1` FOREIGN KEY (`key_column`) REFERENCES <--- shows foreign key constraint name
    `second_table` (`id`) ON DELETE SET NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
    
  2. 删除外键约束:

    ALTER TABLE table_name DROP FOREIGN KEY `table_name_ibfk_1`;
    
  3. 删除密钥

    ALTER TABLE table_name DROP KEY `column_tablein_26440ee6`;
    

这对我有用。

【讨论】:

  • +1 想补充一下,这个问题有很多(可能是重复的),@bbrame 的答案对我有用。
  • 我在 show create table 'name' 中没有约束部分,但是当我做 desc 'name' 时,我可以看到字段有外键约束
  • 这是一个完美的例子,展示了如何处理外键丢失。非常感谢@bbframe。它对我有用。
【解决方案2】:

这看起来像是 MySQL 的错误消息中的一个错误。 (http://bugs.mysql.com/bug.php?id=10333)

使用 SHOW CREATE TABLE table_name 查看外键的实际名称。生成查询时外键名称拼写错误,看起来可能是mysql查询浏览器问题。

【讨论】:

  • 这有助于我知道我的约束是作为 INDEX 创建的,而不是 FOREIGN KEY。然后我使用了“DROP INDEX”子句。谢谢。
【解决方案3】:

为避免在尝试删除外键时出现此错误,请使用约束名称而不是外键的列名。

当我尝试时

mysql> ALTER TABLE mytable DROP PRIMARY KEY;

我得到了错误

ERROR 1025 (HY000): Error on rename of '.\database\#sql-454_3' to '.\database\mytable' (errno: 150).

我解决了这个问题:

mysql> ALTER TABLE mytable DROP PRIMARY KEY, ADD PRIMARY KEY (column1,column2,column3);

一些对你有帮助的链接。

link 1

link 2 [查找 Alex Blume 于 2008 年 11 月 7 日下午 5:09 发布 & Hector Delgadillo 于 2011 年 1 月 21 日凌晨 4:57 发布]

【讨论】:

    【解决方案4】:

    为避免在尝试删除外键时出现此错误,请使用约束名称而不是外键的列名称

    【讨论】:

      【解决方案5】:

      您应该按照 Fahim Parkar 的建议尝试使用外键名称。实际上,这也并不总是有效。

      就我而言,我使用了

      FOREIGN KEY `fk`(`col1`) REFERENCES `table2`(`col1`)
      

      通过创建添加 fk 的代码。

      这个代码的问题是它无效并且应该抛出某种语法错误,但它仍然添加了一个具有随机名称的外键。

      当我使用正确的语法添加 fk 时:

      CONSTRAINT `fk` FOREIGN KEY (`col1`) REFERENCES `table2`(`col1`)
      

      以下代码正确删除了它:

      ALTER TABLE `table1` DROP FOREIGN KEY `fk`
      

      因此,如果您尝试删除具有无效名称的外键,也会发生这种错误。查看表格属性很重要

      SHOW CREATE TABLE `table1`
      

      如果遇到此类错误,请检查外键名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-21
        • 1970-01-01
        • 1970-01-01
        • 2012-06-21
        • 1970-01-01
        • 2021-05-13
        • 2021-09-03
        相关资源
        最近更新 更多