解决: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 外键名字;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456492.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python加盐加密方法hashlib(md5,sha224,sha1,sha256)

用random.randint随机数给密码加,盐加强密码的安全性

Ubuntu16.04以root身份登入!

首先以非root用户身份登入系统。 1,修改root密码:启动shell,随后在shell里面输入命令: sudo passwd root 最后输入root要使用的密码,需要输入两次,这样root密码就修改完毕了! 2,修改…

HDU2193-AVL-数据结构-AVL

题目链接:http://acm.hdu.edu.cn/statistic.php?pid2193&from126&lang&order_type0 好吧。水题一道,原本以为是一道写AVL树的想写来练练手。没有想到却是这样一道水题,好吧,猥琐的水过。 题目意思: 题目大…

玩Linux碰到的问题以及使用技巧总结

文章目录1、问题问题一:解压JDK报错:gzip:stdin:not in gzip format。 问题二:在Linux下ping不通外网 问题三:解决虚拟机克隆后网卡eth0不见的问题 问题四:执行脚本报错:syntax error: unexpected end of f…

python连接MySQL数据库搭建简易博客

实现功能大概 将python和MySQL数据库交互进行 封装 ---》》utils.py 文件程序 ----》blog.py # -*- coding: utf-8 -*- # Time : 2019/08/30 15:33 # Author : Liu # File : utils.pyimport pymysql import hashlibclass dbHelper:def __init__(self, host, user, pass…

利用Sqoop在数据库和Hive、HDFS之间做ETL操作

文章目录[toc] 目录:一、利用Sqoop,从Oracle到HDFS二、利用Sqoop,从Oracle到Hive三、遇到的问题目录: 一、利用Sqoop,从Oracle到HDFS 第一步:把Oracle驱动拷贝到Sqoop安装路径中的lib文件夹下。 第二步&…

跨地域的VPC私网互通【高速通道案例】

最近一家大型企业正在将业务迁移至阿里云平台,用户有深圳,北京,上海等分支,其中上海为总部,用户要求在阿里云上的华南1,华北2,华东2分别建立VPC网络,其中华南1,华北2要与…

HDU 1711 Number Sequence(KMP模板)

http://acm.hdu.edu.cn/showproblem.php?pid1711 这道题就是一个KMP模板。 1 #include<iostream> 2 #include<cstring>3 using namespace std;4 5 const int maxn 10000005;6 7 int n,m;8 9 int next[maxn]; 10 int a[maxn], b[maxn]; 11 12 void get_next() 13…

Redis数据库学习笔记

一、NoSql&#xff08;非关系型数据库&#xff09; NoSQL&#xff1a;NoSQL Not Only SQL 非关系型数据库 ​ NoSQL&#xff0c;泛指非关系型的数据库。随着互联网web2.0网站的兴起&#xff0c;传统的关系数据库在应付web2.0网站&#xff0c;特别是超大规模和高并发的SNS类型…

Sqoop的安装配置及工作机制

文章目录[toc] 目录&#xff1a;1、简介2、sqoop安装2.1、下载并解压2.2、修改配置文件2.3、加入mysql或oracle的jdbc驱动包2.4、验证启动3、Sqoop的原理3.1、代码定制目录&#xff1a; 1、简介 sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。 导入…

3D打印技术在医疗领域能做些什么?帮助精确完成手术

3D打印技术出现在20世纪90年代中期。它与普通打印工作原理基本相同&#xff0c;打印机内装有液体或粉末等“打印材料”&#xff0c;与电脑连接后&#xff0c;通过电脑控制把“打印材料”一层层叠加起来&#xff0c;最终把计算机上的蓝图变成实物。这打印技术称为3D立体打印技术…

【一些简单的jQuery选择器】

学习【js DOM 编程艺术】&#xff0c;最后面有许多jQuery的选择器&#xff0c;每个都动手敲了一遍。 jQuery 提供了高级选择器的方法。 js获取元素的三个基本方法分别是通过标签名&#xff0c;类名和id&#xff0c;即(getElementsByTagName, getElementsByClassName和getElemen…

pymysql操作mysql数据库

一、pymysql操作mysql数据库 安装pymysql pip install pymysql 1.1 pymysql操作数据库的五行拳 连接数据库 使用Connect方法连接数据库 pymysql.Connections.Connection(hostNone, userNone, password, databaseNone, port0, charset) 参数说明&#xff1a;host – 数据库服务…

SecureCRT常用的使用技巧

文章目录前言&#xff1a;1、SecureCRT 超时自动断开连接的解决办法2、SecureCRT连接Linux时&#xff0c;终端显示乱码的问题。3、SecureCRT使用自动记录日志功能4、使用SecureCRT从Windows上传文件到Linux5、SecureCRT配色推荐和永久设置前言&#xff1a; 由于工作需要&#…

解决:(1062, Duplicate entry '2019-08-30' for key 'rdate')

解决(1062, "Duplicate entry 2019-08-30 for key rdate") 显然这个问题是因为插入重复主键导致从库不工作了&#xff0c;更改库的唯一限制&#xff1a; unique 为normal 或者删除unique ALTER TABLE 表明 DROP INDEX 字节名; 实例 CREATE TABLE good_booked (au…

人民币数字金额转大写金额

public class t {public static String Trans2RMB(String money) {int index money.indexOf(".");if (index < 0) {// 没有角分money money ".00";index money.indexOf(".");}if (money.substring(index, money.length()).length() < …

eventBus 与fragment

同一个eventbut是不可以注册两次的&#xff0c;所以我们会在ondestroy方法中进行unregister&#xff08;&#xff09; 但是在fragment中&#xff0c;最好把unregister&#xff08;&#xff09;方法写到 onDestroyView&#xff08;&#xff09;方法中而不是onDestrory&#xff0…

机器学习之线性代数总结

目录1、SVD是什么、表达式是什么及对应的数学含义&#xff1b;2、了解方阵、行列式的含义&#xff08;方阵即矩阵&#xff0c;行列式即矩阵的计算结果&#xff09;3、了解代数余子式的概念4、伴随矩阵的概念5、知道方阵的逆的公式、范德蒙行列式6、知道矩阵的乘法&#xff0c;掌…

Python操作MongoDB

一 安装 pymongo pip install pymongo3.4 ​ 导入 MongoClient from pymongo import MongoClient 二 连接MongoDB数据库 MongoDB端口号:27017 连接MongoDB我们需要使用PyMongo库里面的MongoClient&#xff0c;一般来说传入MongoDB的IP及端口即可&#xff0c;第一个参数为地…

各种插件

上下滚动抽奖效果, 移动端省级联动, 时间联动 , pc端省级联动 vue 支持各种方式上传 一个不太完善的拖拽排序 react 拖拽交换插件 各种小插件 压缩图片移动端 h5上传 h5分片上传 包括服务器 slideSuper 各种滑动效果 wow.js 转载于:https://www.cnblogs.com/dhsz/p/6377956.h…