解决MySQL删除外键时报错Error Code: 1091. Can‘t DROP ‘XXX‘; check that column/key exists
解決MySQL刪除外鍵時(shí)報(bào)錯(cuò)Error Code: 1091. Can't DROP 'XXX'; check that column/key exists
??長(zhǎng)期不寫基礎(chǔ)的 MySQL 代碼,筆者也開(kāi)始犯一些低級(jí)錯(cuò)誤。最近,筆者在嘗試將表中某列的外鍵約束刪除時(shí),MySQL 卻一直報(bào)該列本就不存在的錯(cuò)誤。
筆者報(bào)錯(cuò)時(shí)的運(yùn)行環(huán)境:
-
MySQL 8.0.27
-
Windows 10 教育版
??筆者非常疑惑,因?yàn)槎啻螜z查后發(fā)現(xiàn)列名似乎并沒(méi)有錯(cuò)誤。和往常一樣,筆者為此建立了一個(gè) demo 表,這才發(fā)現(xiàn)了原因所在。
??建表代碼如下:
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) );??當(dāng)建立了上述的表之后,筆者嘗試刪除表 demo2 的外鍵,代碼如下:
ALTER TABLE demo2 DROP FOREIGN KEY demo1_id;??結(jié)果發(fā)生同樣的錯(cuò)誤。
Error Code: 1091. Can't DROP 'demo1_id'; check that column/key exists??這個(gè)問(wèn)題出在建表代碼和刪除外鍵的代碼上。由于在當(dāng)初建表的時(shí)候,沒(méi)有為這個(gè)外鍵約束起一個(gè)名稱,所以 MySQL 為此自動(dòng)生成了一個(gè)名稱,這個(gè)自動(dòng)生成的名稱不同于受到這個(gè)外鍵約束的列名。而刪除外鍵的時(shí)候,需要提供的是這個(gè)外鍵約束名,而不是列名。
??可以印證這一點(diǎn)。在 Navicat Premium 中可以看到關(guān)于這個(gè)表的建表信息。(也可以使用代碼 show create TABLE demo2; 來(lái)查看。)
??可以看到,MySQL 自動(dòng)為列 demo1_id 的外鍵約束生成了一個(gè)名稱 demo2_ibfk_1。因此,刪除外鍵時(shí)應(yīng)使用這個(gè)名稱。即刪除外鍵的代碼應(yīng)如下:
ALTER TABLE demo2 DROP FOREIGN KEY demo2_ibfk_1;??使用了這個(gè)代碼之后,表 demo2 的外鍵就成功被刪除了。
總結(jié)
以上是生活随笔為你收集整理的解决MySQL删除外键时报错Error Code: 1091. Can‘t DROP ‘XXX‘; check that column/key exists的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: log4j2.xml 的标签 logge
- 下一篇: Xshell、Xftp入门使用