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

在尝试删除MySQL表的外键约束时遇到1091错误,问题在于删除外键时应使用约束名而非列名。MySQL自动生成的外键约束名为demo2_ibfk_1,正确删除语句应为`ALTERTABLEdemo2DROPFOREIGNKEYdemo2_ibfk_1`。确保使用正确的约束名称可以成功删除外键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决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 的外键就成功被删除了。

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值