无法删除外键

sol*_*mon 25 mysql foreign-keys foreign-key-relationship mysql-error-1025

我想在我的表中删除外键但是已经进入此错误消息

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>
Run Code Online (Sandbox Code Playgroud)

bbr*_*ame 33

Chris White这里描述的解决方案为我工作.

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

  1. show create table 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 |
    
    Run Code Online (Sandbox Code Playgroud)
  2. 删除外键约束:

    ALTER TABLE table_name DROP FOREIGN KEY `table_name_ibfk_1`;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 删除密钥

    ALTER TABLE table_name DROP KEY `column_tablein_26440ee6`;
    
    Run Code Online (Sandbox Code Playgroud)

这样做对我来说.


Ama*_*san 7

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

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

  • 它帮助我知道我的约束是作为INDEX而不是FOREIGN KEY创建的.然后我使用了"DROP INDEX"子句.谢谢. (2认同)

Fah*_*kar 6

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

当我尝试

mysql> ALTER TABLE mytable DROP PRIMARY KEY;
Run Code Online (Sandbox Code Playgroud)

我得到了错误

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

我解决了它:

mysql> ALTER TABLE mytable DROP PRIMARY KEY, ADD PRIMARY KEY (column1,column2,column3);
Run Code Online (Sandbox Code Playgroud)

一些可以帮助您的链接.

链接1

链接2 [寻找发布者Alex Blume于2008年11月7日下午5:09&发布者Hector Delgadillo于2011年1月21日上午4:57发表]