您现在的位置是:首页 > 电脑学习教程 > 其他平台 > 文章正文 其他平台

MySQL删除外键时报错Error Code:1091. Can‘t DROP ‘XXX‘的解决方法

2022-09-01 09:54:02 其他平台

简介解决MySQL删除外键时报错Error Code: 1091. Can't DROP 'XXX'; check that column/key exists长期不写基础的 MySQL...

解决MySQL删除外键时报错Error Code: 1091. Can't DROP 'XXX'; check that column/key exists

长期不写基础的 MySQL 代码,笔者也开始犯一些低级错误。最近,笔者在尝试将表中某列的外键约束删除时,MySQL 却一直报该列本就不存在的错误。

笔者报错时的运行环境:

MySQL 8.0.27

Windows 10 教育版

Error Code: 1091. Can't DROP 'XXX'; check that column/key exists

笔者非常疑惑,因为多次检查后发现列名似乎并没有错误。和往常一样,笔者为此建立了一个 demo 表,这才发现了原因所在。

建表代码如下:

  1. CREATE TABLE demo1 ( 
  2. id CHAR(32), 
  3.  
  4. PRIMARY KEY (id) 
  5. ); 
  6.  
  7. CREATE TABLE demo2 ( 
  8. id CHAR(32), 
  9. demo1_id CHAR(32), 
  10.  
  11. PRIMARY KEY (id), 
  12. FOREIGN KEY (demo1_id) REFERENCES demo1 (id) 
  13. ); 

当建立了上述的表之后,笔者尝试删除表 demo2 的外键,代码如下:

  1. ALTER TABLE demo2 DROP FOREIGN KEY demo1_id; 

结果发生同样的错误。

Error Code: 1091. Can't DROP 'demo1_id'; check that column/key exists

这个问题出在建表代码和删除外键的代码上。由于在当初建表的时候,没有为这个外键约束起一个名称,所以 MySQL 为此自动生成了一个名称,这个自动生成的名称不同于受到这个外键约束的列名。而删除外键的时候,需要提供的是这个外键约束名,而不是列名。

可以印证这一点。在 Navicat Premium 中可以看到关于这个表的建表信息。(也可以使用代码 show create TABLE demo2; 来查看。)

可以看到,MySQL 自动为列 demo1_id 的外键约束生成了一个名称 demo2_ibfk_1。因此,删除外键时应使用这个名称。即删除外键的代码应如下:


  1. ALTER TABLE demo2 DROP FOREIGN KEY demo2_ibfk_1; 

使用了这个代码之后,表 demo2 的外键就成功被删除了。

相关文章

站点信息