MYSQL:外键删除后,查询表发现外键依旧存在的原因及相关解决办法

1、创建表test

create table test(
id int(5) not null primary key,
wid int(5) not null);

查看表结构

MYSQL:外键删除后,查询表发现外键依旧存在的原因及相关解决办法

2、创建student表

create table student(
id int(5) not null primary key);

查看表结构

MYSQL:外键删除后,查询表发现外键依旧存在的原因及相关解决办法

 

3、修改表结构来创建外键(test表的wid列对应student表的id列)

 alter table test add foreign key(wid) references student(id);

MYSQL:外键删除后,查询表发现外键依旧存在的原因及相关解决办法

查看表结构---显示有外键了

MYSQL:外键删除后,查询表发现外键依旧存在的原因及相关解决办法

4、删除外键

首先通过查看创建test表语句查看外键约束名

show create table test;

MYSQL:外键删除后,查询表发现外键依旧存在的原因及相关解决办法

可以看到外键约束名是test_ibfk_1

通过约束名删除外键

alter table test drop foreign key test_ibfk_1;

MYSQL:外键删除后,查询表发现外键依旧存在的原因及相关解决办法

外键删除成功!

5、查看表结构可以看到还是存在外键!!!!

MYSQL:外键删除后,查询表发现外键依旧存在的原因及相关解决办法

MYSQL:外键删除后,查询表发现外键依旧存在的原因及相关解决办法

这是因为删除外键没有删除干净,原因如下;

显然这是MYSQL的一个BUG:
MYSQL在建外键后,会自动建一个同名的索引

MYSQL:外键删除后,查询表发现外键依旧存在的原因及相关解决办法

所以你必须需要再次删除该索引

MYSQL:外键删除后,查询表发现外键依旧存在的原因及相关解决办法

over!!!