MySQL报错cannot add foreign key constraint的问题解决方法

 更新时间:2023年06月07日 10:38:25   作者:吴名氏.  
这篇文章主要介绍了MySQL报错cannot add foreign key constraint的问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

1 问题场景

利用Navicat对MySQL两张表想要进行外键关联时设置正确,但出现出现如下错误

在这里插入图片描述

2 原因分析

创建外键错误的原因大概有一下几个原因:
1、关联的两个字段的字段的类型不一致
2、设置外键删除时set null
3、两张表的引擎不一致

2.1 数据类型不一致

主表:

在这里插入图片描述

需要关联的表:

在这里插入图片描述

2.2 字段设置不一样

主表:

在这里插入图片描述

需要关联的表:

在这里插入图片描述

2.3 引擎设置为“InnoDB”

数据库引擎应该一致,如图:

在这里插入图片描述

3 总结

3.1 外键条件

在我们使用外键的时候,应该遵循如下条件:

  • 外键要存在,首先必须保证表的引擎是 InnoDB(默认的存储引擎),如果不是 InnoDB存储引擎,那么外键可以创建成功,但没有约束作用;
  • 外键字段的字段类型(列类型),必须与父表的主键类型完全一致;
  • 每张表中的外键名称不能重复;
  • 增加外键的字段,如果数据已经存在,那么要保证数据与父表中的主键对应。
  • 如果外键约束模式选择SET NULL ,那么字段必须允许为NULL,否则出现Cannot add foreign key constraint。

3.2 外键约束

所谓外键约束,就是指外键的作用。之前所讲的外键的作用都是默认的作用,实际上,可以通过对外键的需求,进行定制操作。外键约束有三种模式,分别为:

  • district:严格模式(默认),父表不能删除或更新一个已经被子表数据引用的记录;
  • cascade:级联模式,父表的操作,对应子表关联的数据也跟着被删除;
  • set null:置空模式,父表的操作之后,子表对应的数据(外键字段)被置空。

到此这篇关于MySQL报错cannot add foreign key constraint的问题解决方法的文章就介绍到这了,更多相关mysql cannot add foreign key constraint内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql 临时表 cann''t reopen解决方案

    mysql 临时表 cann''t reopen解决方案

    MySql关于临时表cann't reopen的问题,本文将提供详细的解决方案,需要了解的朋友可以参考下
    2012-11-11
  • SQL实现LeetCode(175.联合两表)

    SQL实现LeetCode(175.联合两表)

    这篇文章主要介绍了SQL实现LeetCode(175.联合两表),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Mysql中LEFT JOIN和JOIN查询区别及原理详解

    Mysql中LEFT JOIN和JOIN查询区别及原理详解

    这篇文章主要介绍了Mysql中LEFT JOIN和JOIN查询区别及原理详解,Nested Loop Join 实际上就是通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果,需要的朋友可以参考下
    2023-08-08
  • sqlmap注入图文详解

    sqlmap注入图文详解

    sqlmap 是一个自动SQL 射入工具。本文收集了一些利用Sqlmap做注入测试的TIPS,其中也包含一点绕WAF的技巧,便于大家集中查阅,希望能给你带来帮助
    2021-08-08
  • Mysql体系化探讨令人头疼的JOIN运算

    Mysql体系化探讨令人头疼的JOIN运算

    这篇文章主要介绍了体系化探讨令人头疼的JOIN运算,本文将对JOIN运算进行体系化深入的探讨,根据自己工作经验及参考业界经典案例,针对性地提出语法简化和性能优化的方法论,需要的朋友可以参考下
    2022-07-07
  • mysql排序ORDER BY不生效的问题解决

    mysql排序ORDER BY不生效的问题解决

    order by作为一个常用的功能,在项目中应该经常用到,本文主要介绍了mysql排序ORDER BY不生效的问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • Mysql索引详细介绍

    Mysql索引详细介绍

    这篇文章主要介绍了Mysql索引详细介绍,本文讲解了Mysql索引简介、设计索引的原则、如何使用索引等内容,需要的朋友可以参考下
    2014-07-07
  • dubbo中zookeeper请求超时问题:mybatis+spring连接mysql8.0.15的配置

    dubbo中zookeeper请求超时问题:mybatis+spring连接mysql8.0.15的配置

    这篇文章主要介绍了dubbo中zookeeper请求超时问题:mybatis+spring连接mysql8.0.15的配置,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • MYSQL如何查看操作日志详解

    MYSQL如何查看操作日志详解

    任何一种数据库中都有各种各样的日志,下面这篇文章主要给大家介绍了关于MYSQL如何查看操作日志的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • MYSQL大量写入问题优化详解

    MYSQL大量写入问题优化详解

    这篇文章主要介绍了MYSQL大量写入问题优化详解,文中优化点解释的很清楚,让人看完就明了,感兴趣的同学可以阅读理解下
    2021-03-03

最新评论