1215 – Cannot add foreign key constraint

1215 – Cannot add foreign key constraint1215 – Cannot add foreign key constraint

大家好,又见面了,我是你们的朋友全栈君。

    最近在做新生入学系统,学生表中包括新生的班级,专业等信息,班级,专业就需要和班级表,专业表进行关联,但是在添加外键的过程中却出现了“Cannot add foreign key constraint” 的问题,也就是不能添加外键约束,为什么就不能添加外键呢?

1215 - Cannot add foreign key constraint

出现这个问题主要有三个原因:

(1)外键对应的字段数据类型不一致

(2)设置外键时“删除时”设置为“SET NULL”

(3)两张表的存储引擎不一致

     经过检查,前两种情况排除,但是两张表的存储引擎都不清楚,于是又百度了一些关于存储引擎的东西:

查询表的引擎:

a、show table status from db_name where name=’table_name’;

b、show create table table_name;

查询结果如图:

班级表的引擎:

1215 - Cannot add foreign key constraint

学生表的引擎:

1215 - Cannot add foreign key constraint


    果然是两张表的引擎不一致,那就修改成一样的呗

修改表的引擎:

alter table table_name engine=innodb;

    首先将basicclassentities表的ndbcluster引擎修改为InnoDB,但是又出现了新的错误:”1217 – Cannot delete or update a parent row: a foreign key constraint fails”,于是尝试将freshstudententities表的引擎修改为ndbcluster,同样的问题。

    “1217 – Cannot delete or update a parent row: a foreign key constraint fails“,这可能是MySQL在引擎中设置了foreign key关联,造成无法更新或删除数据。可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况:

SET FOREIGN_KEY_CHECKS = 0; 删除完成后设置 :SET FOREIGN_KEY_CHECKS = 1; 

     还是不能修改表的引擎,于是又继续探索mysql的各种引擎(http://www.cnblogs.com/ggjucheng/archive/2012/11/11/2765469.html),经过分析,由于ndbcluster和集群,分布式有关,自己的电脑上没有足够的权限,所以修改不了,只要将两张表的引擎都修改为InnoDB,就可以添加外键了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105725.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月25日 上午6:00
下一篇 2022年4月25日 上午6:00


相关推荐

  • [TK]TK的S3D里面的光影

    [TK]TK的S3D里面的光影汤锴 2007 10 1219 22 42 还在做网页 做完了发出来地上的光影就是辐射度算法 其实没有改动过以前 S3D1 0 没有出现这个效果 主要是颜色曝光过度 S3D2 0 彻底解决了颜色问题 所以就美术可以放心发挥各种光影效果了 汤锴 2007 10 1219 23 18 以前因为颜色的困扰 太亮或者太暗的光照都不能出现汤锴 2

    2026年3月26日
    2
  • SpringBoot自动装配原理,这一篇就够了!

    SpringBoot自动装配原理,这一篇就够了!学习 SpringBoot 绝对避不开自动装配这个概念 这也是 SpringBoot 的关键之一本人也是 SpringBoot 的初学者 下面的一些总结都是结合个人理解和实践得出的 如果有错误或者疏漏 请一定一定一定 不是欢迎 是一定 帮我指出 在评论区回复即可 一起学习 篇幅较长 希望你可以有耐心 如果只关心 SpringBoot 装配过程 可以直接跳到第 7 部分想要理解 spring 自动装配 需要明确两个含义 装配 装配什么 自动 怎么自动 文章目录 1 Warmup1 1 setter 注入 1

    2026年3月19日
    2
  • 前端学习笔记 – promise是什么?能解决什么问题?

    前端学习笔记 – promise是什么?能解决什么问题?返回目录promise是什么?promise是异步编程的一种解决方案:从语法上讲,promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。promise有三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);Promise有以上三种状态,只有异步操作的结果可以决定当前是哪一种状态,其他任何操作都无法改变这个状态状态一旦改变,就不会再变,任何时候都可以得

    2022年6月8日
    65
  • sleep和wait区别

    sleep和wait区别sleep 方法我们首先要知道该方法是属于 Thread 类中的 而 wait 方法 则是属于 Object 类中的 sleep 方法导致了程序暂停执行指定的时间 让出 cpu 该其他线程 但是他的监控状态依然保持者 当指定的时间到了又会自动恢复运行状态 在调用 sleep 方法的过程中 线程不会释放对象锁 wait 方法而当调用 wait 方法的时候 线程会放弃对象锁 进入等待此对象的等待锁定池 只有针对此对象调用 notify 方法后本线程才进入对象锁定池准备获取对象锁进入运行状态

    2026年3月20日
    3
  • qq安全检查未通过禁止下载文件怎么办_qq文件安全检查未通过

    qq安全检查未通过禁止下载文件怎么办_qq文件安全检查未通过QQ日常抽风

    2022年8月10日
    11
  • java中的守护线程守护的是什么_java守护线程的作用

    java中的守护线程守护的是什么_java守护线程的作用守护线程在Java中有两类线程:UserThread(用户线程)DaemonThread(守护线程)守护线程的功能非常简单,在其本身是一个线程的同时,主要是为了给其他的线程提供服务,比如说计时器,清空高速缓存等等操作,守护线程具有和被守护线程一样的生命周期(这里并不是说守护线程和被守护线程常常是1-1的关系),当被守护线程死亡,守护线程往往也会死亡,当虚拟机中只剩下守护线程时,虚拟机就会退出,因为此时也没有运行程序的必要了一个比较通俗的解释:任何一个守护线程都是整个JVM中所有非守护线程

    2022年10月9日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号