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给字符串加一个高效索引的实现

    MySQL给字符串加一个高效索引的实现

    本文主要介绍了MySQL给字符串加一个高效索引的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Mysql案例之GROUP_CONCAT函数的具体使用

    Mysql案例之GROUP_CONCAT函数的具体使用

    本文详细的介绍了MySQL中学生与学科多对多关联场景下的排序问题,通过GROUP_CONCAT函数结合左连接和分组,一次性获取每个学生首个学科名称并排序,感兴趣的可以了解一下
    2025-05-05
  • MYSQL中information_schema的使用

    MYSQL中information_schema的使用

    information_schema是MySQL中的一个虚拟数据库,用于提供关于 MySQL 服务器及其数据库的元数,这些元数据包括数据库名称、表名称、列的数据类型、访问权限等信息,下面就来详细的介绍一下如何使用,感兴趣的可以了解一下
    2025-08-08
  • MySQL多表联查的实现思路

    MySQL多表联查的实现思路

    数据库应用在我们的生活中是很常见的,在编辑一些应用以及软件的时候都需要用到数据库来存储数据,下面这篇文章主要给大家介绍了关于MongoDB中实现多表联查的相关资料,需要的朋友可以参考下
    2023-02-02
  • VSCODE连接MySQL数据库服务图文教程

    VSCODE连接MySQL数据库服务图文教程

    最近做网页碰到连接数据库的问题,上网查了挺久终于搞明白了,下面这篇文章主要给大家介绍了关于VSCODE连接MySQL数据库服务的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • MySQL分表自动化创建的实现方案

    MySQL分表自动化创建的实现方案

    在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在多个表中,从而提高数据库的性能和可维护性,本文介绍了MySQL分表自动化创建的实现方案
    2025-01-01
  • MySQL主从搭建(多主一从)的实现思路与步骤

    MySQL主从搭建(多主一从)的实现思路与步骤

    通过MySQL主从配置,可以实现读写分离减轻数据库压力,最近正好遇到这个功能,所以这篇文章主要给大家介绍了关于MySQL主从搭建(多主一从)的实现思路与步骤,需要的朋友可以参考下
    2021-05-05
  • MySQL删除表数据与MySQL清空表命令的3种方法浅析

    MySQL删除表数据与MySQL清空表命令的3种方法浅析

    删除现有MySQL表非常容易,但是删除任何现有的表时要非常小心,因为删除表后丢失的数据将无法恢复,下面这篇文章主要给大家介绍了关于MySQL删除表数据与MySQL清空表命令的3种方法的相关资料,需要的朋友可以参考下
    2022-08-08
  • 详细深入聊一聊Mysql中的int(1)和int(11)

    详细深入聊一聊Mysql中的int(1)和int(11)

    mysql数据库作为当前常用的关系型数据库,肯定会遇到设计表的需求,下面对设计表时int类型的设置进行分析,下面这篇文章主要给大家介绍了关于Mysql中int(1)和int(11)的相关资料,需要的朋友可以参考下
    2022-08-08
  • linux mysql 报错:MYSQL:The server quit without updating PID file

    linux mysql 报错:MYSQL:The server quit&nbs

    mysql 报错:MYSQL:The server quit without updating PID file。以下是可能的原因与解决方法
    2013-02-02

最新评论