mysql-创建外键时出现Cannot add foreign key constraint

问题:
我想在students表中创建外键ClassID,关联到class表中的主键ClassID上,要求级联更新删除,但创建外键过程中显示Cannot add foreign key constraint。

先看一下关联表结构,


classes表结构

students表结构

出现该问题时要考虑一下几点:

  • 1、两张表所用引擎是否一致
  • 2、关联两字段的类型是否一致
  • 3、关联两字段配置是否一致

分步来看:

1、两表的存储引擎是否一致

查看单张表使用存储引擎的SQL语句:

show table status from database_name where name='table_name'\G;

结果如下:


classes引擎

students引擎

可以看出classes表的引擎是MyISAM,想创建外键必须改为InnoDB

修改表引擎的SQL语句如下:

alter table table_name engine=engine_name;

修改后结果如下:


修改classes引擎

2、关联两字段的的类型是否一致

由之前的表结构可看出,两个字段的类型均为int(16)

如需修改字段类型,可用SQL语句:

alter table table_name modify col_name field_type;

3、关联字段的配置是否一致

由上边表结构可以看出,classes表中ClassID的default值为0,而students表中ClassID的default值为NULL,因此需要修改字段的default。

修改字段default的SQL语句:

alter table table_name alter column col_name drop default;//之前有default需先删除
alter table table_name alter column col_name set default def_value;

修改后结果为:


修改classes的default

三步修改完成后再次尝试创建外键

alter table table_name add foreign key(key) references table2_name(key) on update cascade on delete cascade;

操作成功,结果如下:


创建外键成功
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容