解决:Navicat for mysql 设置外键出错
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 设置外键出错相关推荐
- mysql 设置外键约束SET FOREIGN_KEY_CHECKS=1
问题描述:Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构 解决方法: 在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0; 然后将原来表的数据导出到sq ...
- mysql设置外键并一键生成数据表关系图
文章目录 1.概念 2.理解 3.添加外键时需要注意的规则 4.navicat for mysql中设置外键 5.数据表关系图的创建 1.概念 主键是能确定一条记录的唯一标识. 外键用于与另一张表的关 ...
- mysql 设置外键
数据库 mysql 建立外键的前提:本表的列必须与外键类型相同(外键 必须是外表主键). 外键作用: 使两张表形成关联,外键只能引用外表中的列的值! 指定主键关键字: foreign key(列名) ...
- mysql设置外键_mysql怎么增加外键
mysql增加外键的方法:1.在CREATE TABLE语句中,通过FOREIGN KEY关键字来添加外键:2.在ALTER TABLE语句中,通过ADD和FOREIGN KEY关键字来添加外键. M ...
- 使用Navicat for MySQL添加外键约束
先介绍一下基本情况: 现在有两个表一张是t_blog表(博客表),一张是t_blogType表(博客类别) 现在我想把t_blog表中的typeID属性设置为外键,关联t_blogType表中的id属 ...
- Mysql 建立外键出错1822 可能原因之一分析 - Failed to add the foreign key constraint. Missing index for constraint
项目场景: 通过sql语言在MySQL查询中建立表,其中一个表引用其他表的属性出现问题报错1822 问题描述 被引用的表--用户信息表: 可以看到其中已有主键s_id,为自增长形式 CREATE TA ...
- 解决 Navicat 无法导入带外键的json 亲测有效!
进入mysql数据库,设置全局外键检查忽略 临时的解决办法是: set @@global.foreign_key_checks = 0; 在导入完毕后 set @@global.foreign_key ...
- mysql数据库设置外键失效【仅仅推荐测试库】
MYSQL在进行数据删除时,由于有外键不能进行修改和删除. 解决办法:可以设置外键失效.删除完之后,开启外键约束 1.查看外键约束 SELECT@@foreign_key_checks; 2.设置外键 ...
- mysql创建外键时1025_navicat设置外键报错1025怎么办
navicat设置外键报错1025怎么办,字段,类型,表字,给大家,报错 navicat设置外键报错1025怎么办 易采站长站,站长之家为您整理了navicat设置外键报错1025怎么办的相关内容. ...
最新文章
- Maven详解之聚合与继承
- Go-err is shadowed during return
- 洛谷 P1209 修理牛棚== Codevs 2079 修理牛棚
- vc调用mysql数据库操作例子
- BloomFilter算法概述
- python卷积神经网络cnn的训练算法_【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理...
- 操作系统:再见CentOS,将于本月底终止维护!
- java简单投票系统_JSP实现的简单Web投票程序代码
- 学点数学(4)-协方差矩阵
- 荷花用计算机怎么画,怎样画荷花荷叶简笔画
- easyui获取图片路径_094 ego电商项目-2 菜单、图片上传、CRUD
- ES6的开发环境搭建 1
- Go select chan操作
- mac M1安装SVN错误Error: Command failed with exit 128: git
- android 雪球红包脚本,利用adb shell和node.js实现抖音自动抢红包功能(推荐)
- Android文件管理器
- 正则html在线测试,正则表达式在线测试工具
- 什么是CSTC价值协议
- networkx的使用
- 关于 cannot open source input file “ ... “ No such file or directory 相关报错解决方式
热门文章
- 15条常用的视频音频编辑脚本命令(mencoder/ffmpeg等)
- x264源代码分析1。fread()
- Idea 插件 lombok 的安装和使用
- AI:初学者如何从零学习人工智能?看完你就懂了
- 最简单的 post 请求发起方式、调用其它系统接口
- Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程
- P4313 文理分科 网络流
- Zookeeper客户端Curator使用详解
- Mint-ui中loadmore(上拉加载下拉刷新)组件在ios中滑动会触发点击事件的解决方法...
- cocos2d-x的Android工程开启c++0x特性