解决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 表,这才发现了原因所在。
建表代码如下:
create table demo1 ( id char(32), primary key (id) ); create table demo2 ( id char(32), demo1_id char(32), primary key (id), foreign key (demo1_id) references demo1 (id) );
当建立了上述的表之后,笔者尝试删除表 demo2 的外键,代码如下:
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
。因此,删除外键时应使用这个名称。即删除外键的代码应如下:
alter table demo2 drop foreign key demo2_ibfk_1;
使用了这个代码之后,表 demo2 的外键就成功被删除了。
总结
到此这篇关于mysql删除外键时报错error code:1091. can‘t drop ‘xxx‘解决的文章就介绍到这了,更多相关mysql删除外键报错error code:1091内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!