1 看下是不是外键允许为空,不唯一等约束条件不满足

2 或者外键设置删除时为 restrict

1. 两个字段的类型或者大小不严格匹配。例如,如果一个是int(10),那么外键也必须设置成int(10),而不是int(11),也不能是tinyint。另外,你还必须确定两个字段是否一个为 signed,而另一个又是unsigned(即:无符号),这两字段必须严格地一致匹配,更多关于signed和unsigned的信息,请参阅:http://www.verysimple.com/blog/?p=57
2. 试图设置外键的字段没有建立起索引,或者不是一个primary key(主键)。如果其中一个不是primary key的话,你必须先为它创建一个索引。
3. 其中一个或者两个表是MyISAM引擎的表。若想要使用外键约束,表必须是InnoDB引擎(实际上,如果两个表都是MyISAM 引擎的,这个错误根本不会发生,但也不会产生外键,只会建立索引)你需要检查表的引擎类型。
4. 外键的名字不能重复。你应该检查你的数据库以确保外健名字是唯一的,或者你在键名后面加上几个随机的字符以测试是否是这个原因。
5. 你可能设置了ON DELETE SET NULL,但是相关的键的字段又设置成了NOTS NULL值。你可能通过修改cascade的属性值或者把字段属性设置成allow null来解决。
6. 请确定你的Charset和Collate选项在表级和字段级上的一致。
7. 你可能设置为外键设置了一个默认值,如default=0。
8. ALTER声明中有语法错误

例子:

建立class表与student表之间的外键连接,class为父表,student为子表
打开student的设计表。

如果c_id不允许为空则当,选择删除时-->>SET NULL就会出现Cannot add foreign key constraint的提示,这是因为删除置空有条件,必须满足字段允许为空(如果不满足,外键无法创建)当然,如果不允许为空,可以选择删除时-->>CASCADE也可以建立外键。

当勾选允许为空之后

再去保存就可以了。

还有必须注意,Engin必须为InnoDB。

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

一、如果一张表中有一个非主键的字段指向了别一张表中的主键,就将该字段叫做外键。

  一张表中可以有多个外键。

  外键的默认作用有两点:

  1.对子表(外键所在的表)的作用:子表在进行写操作的时候,如果外键字段在父表中找不到对应的匹配,操作就会失败。

  2.对父表的作用:对父表的主键字段进行删和改时,如果对应的主键在子表中被引用,操作就会失败。

  外键的定制作用----三种约束模式:

    district:严格模式(默认), 父表不能删除或更新一个被子表引用的记录。

    cascade:级联模式, 父表操作后,子表关联的数据也跟着一起操作。

    set null:置空模式,前提外键字段允许为NLL,  父表操作后,子表对应的字段被置空。

  使用外键的前提:

  1. 表储存引擎必须是innodb,否则创建的外键无约束效果。

  2. 外键的列类型必须与父表的主键类型完全一致。

  3. 外键的名字不能重复。

  4. 已经存在数据的字段被设为外键时,必须保证字段中的数据与父表的主键数据对应起来。

二、新增外键

  1. 在创建时增加

   create table my_tab1(

   id int primary key auto_increment,

   name varchar(10) not null,

   class int,

   foreign key(class) references my_tab2(主键字段名);

   )charset utf8;

  2. 在创建好的表中增加

   alter table my_tab1 add [constraint 外键名] foreign key(外键字段名) references mytab2(主键字段名);

三、删除外键

  alter table my_tab drop foreign key 外键名字;

解决:Navicat for mysql 设置外键出错相关推荐

  1. mysql 设置外键约束SET FOREIGN_KEY_CHECKS=1

    问题描述:Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构 解决方法: 在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0; 然后将原来表的数据导出到sq ...

  2. mysql设置外键并一键生成数据表关系图

    文章目录 1.概念 2.理解 3.添加外键时需要注意的规则 4.navicat for mysql中设置外键 5.数据表关系图的创建 1.概念 主键是能确定一条记录的唯一标识. 外键用于与另一张表的关 ...

  3. mysql 设置外键

    数据库 mysql 建立外键的前提:本表的列必须与外键类型相同(外键 必须是外表主键). 外键作用: 使两张表形成关联,外键只能引用外表中的列的值! 指定主键关键字: foreign key(列名) ...

  4. mysql设置外键_mysql怎么增加外键

    mysql增加外键的方法:1.在CREATE TABLE语句中,通过FOREIGN KEY关键字来添加外键:2.在ALTER TABLE语句中,通过ADD和FOREIGN KEY关键字来添加外键. M ...

  5. 使用Navicat for MySQL添加外键约束

    先介绍一下基本情况: 现在有两个表一张是t_blog表(博客表),一张是t_blogType表(博客类别) 现在我想把t_blog表中的typeID属性设置为外键,关联t_blogType表中的id属 ...

  6. Mysql 建立外键出错1822 可能原因之一分析 - Failed to add the foreign key constraint. Missing index for constraint

    项目场景: 通过sql语言在MySQL查询中建立表,其中一个表引用其他表的属性出现问题报错1822 问题描述 被引用的表--用户信息表: 可以看到其中已有主键s_id,为自增长形式 CREATE TA ...

  7. 解决 Navicat 无法导入带外键的json 亲测有效!

    进入mysql数据库,设置全局外键检查忽略 临时的解决办法是: set @@global.foreign_key_checks = 0; 在导入完毕后 set @@global.foreign_key ...

  8. mysql数据库设置外键失效【仅仅推荐测试库】

    MYSQL在进行数据删除时,由于有外键不能进行修改和删除. 解决办法:可以设置外键失效.删除完之后,开启外键约束 1.查看外键约束 SELECT@@foreign_key_checks; 2.设置外键 ...

  9. mysql创建外键时1025_navicat设置外键报错1025怎么办

    navicat设置外键报错1025怎么办,字段,类型,表字,给大家,报错 navicat设置外键报错1025怎么办 易采站长站,站长之家为您整理了navicat设置外键报错1025怎么办的相关内容. ...

最新文章

  1. Maven详解之聚合与继承
  2. Go-err is shadowed during return
  3. 洛谷 P1209 修理牛棚== Codevs 2079 修理牛棚
  4. vc调用mysql数据库操作例子
  5. BloomFilter算法概述
  6. python卷积神经网络cnn的训练算法_【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理...
  7. 操作系统:再见CentOS,将于本月底终止维护!
  8. java简单投票系统_JSP实现的简单Web投票程序代码
  9. 学点数学(4)-协方差矩阵
  10. 荷花用计算机怎么画,怎样画荷花荷叶简笔画
  11. easyui获取图片路径_094 ego电商项目-2 菜单、图片上传、CRUD
  12. ES6的开发环境搭建 1
  13. Go select chan操作
  14. mac M1安装SVN错误Error: Command failed with exit 128: git
  15. android 雪球红包脚本,利用adb shell和node.js实现抖音自动抢红包功能(推荐)
  16. Android文件管理器
  17. 正则html在线测试,正则表达式在线测试工具
  18. 什么是CSTC价值协议
  19. networkx的使用
  20. 关于 cannot open source input file “ ... “ No such file or directory 相关报错解决方式

热门文章

  1. 15条常用的视频音频编辑脚本命令(mencoder/ffmpeg等)
  2. x264源代码分析1。fread()
  3. Idea 插件 lombok 的安装和使用
  4. AI:初学者如何从零学习人工智能?看完你就懂了
  5. 最简单的 post 请求发起方式、调用其它系统接口
  6. Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程
  7. P4313 文理分科 网络流
  8. Zookeeper客户端Curator使用详解
  9. Mint-ui中loadmore(上拉加载下拉刷新)组件在ios中滑动会触发点击事件的解决方法...
  10. cocos2d-x的Android工程开启c++0x特性