MySQL添加外键报错Cannot add foreign key constraint怎么解决?

 更新时间:2026年07月25日 10:58:32   作者:雪の星空朝酱  
在MySQL中添加外键时遇到“Cannot add foreign key constraint”或error 1512/1452错误?别着急,这篇文章帮你快速排查常见原因:外键字段不能是主键、参考字段必须唯一、数据类型和排序规则要一致、目标表需为空、引擎必须是InnoDB,照着这6个要点检查,轻松搞定外键设置

mysql添加外键报错:Cannot add foreign key constraint

问题描述:

error1512 Cannot add foreign key constraint或是error1452 Cannot add foreign key constraint等。

解决办法

首先定义一个表a(字段名有id(主键),name,pas),

表b(id(主键),user_phone,user_collect)。 

其实也就是添加外键步骤: 

假设b表的user_phone要设置外键,且为a表的name(前提)

首先要知道:

  • 1.外键字段不能为该表的主键,即id的外键不存在;
  • 2.外联字段要是主键或key或uniquekey等。在这里我们需要把表a的name字段设置为uniquekey。
  • 3.字段与外联字段的数据类型,长度,默认类型,排序等一直才行。这里我们加入a表中的name字段为varchar(20)utf8_bin,那么表b中的user_phone也要一样才行。
  • 4.想要设置外键的表要没有数据才行。即表b中无数据才能设置外键。
  • 5.数据库引擎设置为INNODB型,即支持事务处理(mysql5.5版本以上默认类型)
  • 6.如果问题还未解决看一下两张表的主键属性能否一致。 

经过上面几个过程就可以完成外键的设置了,你可以设置如下:

在DELETE下设置RESTROCT为CASCADE时会有表a中删除数据,表b中关联数据也会自动清除的效果。

关于引擎类型查看

右键设计表,点击选项即可查看!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 基于mysql+mycat搭建稳定高可用集群负载均衡主备复制读写分离操作

    基于mysql+mycat搭建稳定高可用集群负载均衡主备复制读写分离操作

    这篇文章主要介绍了基于mysql+mycat搭建稳定高可用集群负载均衡主备复制读写分离操作,需要的朋友可以参考下
    2018-09-09
  • 深入探究MySQL事务实现原理

    深入探究MySQL事务实现原理

    数据库事务是指一组数据库操作,这些操作必须被视为一个不可分割的单元,要么全部执行成功,要么全部失败回滚,本文详细的给大家介绍了MySQL事务的实现原理,对我们学习MySQL有一定的帮助,感兴趣的同学可以跟着小编一起来探究
    2023-06-06
  • MySQL中索引失效场景,原因以及解决方法介绍

    MySQL中索引失效场景,原因以及解决方法介绍

    这篇文章主要为大家详细介绍了MySQL中索引失效场景,原因以及解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-07-07
  • 详解mysql集群:一主多从架构实现

    详解mysql集群:一主多从架构实现

    这篇文章主要介绍了mysql集群一主多从架构实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • mysql自动化安装脚本(ubuntu and centos64)

    mysql自动化安装脚本(ubuntu and centos64)

    这篇文章主要介绍了mysql自动化安装脚本(ubuntu and centos64),需要的朋友可以参考下
    2014-05-05
  • MySQL日期格式化yyyy-mm-dd详解(DATE_FORMAT()函数)

    MySQL日期格式化yyyy-mm-dd详解(DATE_FORMAT()函数)

    MySQL提供了很多功能强大、方便易用的函数,在进行数据库管理以及数据的查询和操作时,帮助我们提高对数据库的管理效率,下面这篇文章主要给大家介绍了关于MySQL日期格式化yyyy-mm-dd(DATE_FORMAT()函数)的相关资料,需要的朋友可以参考下
    2023-01-01
  • 给MySQL表中的字段设置默认值的两种方法

    给MySQL表中的字段设置默认值的两种方法

    在MySQL中,我们可以为表的字段设置默认值,以确保在插入新记录时,如果没有为该字段指定值,将使用默认值,要为MySQL表中的字段设置默认值,我们可以在创建表时或者在已存在的表上使用ALTER TABLE语句进行修改,下面将展示两种设置默认值的方法,需要的朋友可以参考下
    2023-11-11
  • 分享MySQL生产库内存异常增高的排查过程

    分享MySQL生产库内存异常增高的排查过程

    这篇文章主要介绍了分享MySQL生产库内存异常增高的排查过程,基于MySQL实例的内存使用率高的报警的问题展开对主题的问题,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • MySQL ENUM一个字段引发的故障踩坑实录

    MySQL ENUM一个字段引发的故障踩坑实录

    Mysql中的enum类型就是我们常说的枚举类型,它的取值范围需要在创建表时通过枚举方式(一个个的列出来)显式指定,这篇文章主要介绍了MySQL ENUM一个字段引发的故障踩坑实录的相关资料,需要的朋友可以参考下
    2026-01-01
  • mysql复制data文件迁移的实现步骤

    mysql复制data文件迁移的实现步骤

    有时候,我们需要迁移整个数据库,包括数据文件,本文将介绍如何通过复制MySQL的data文件来完成数据库迁移,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11

最新评论