外键的作用

1、用来约束两张表中的字段

2、外键也可以用来实现一对多

我们先举一个这样的例子,让大家对外键有一个基本的认识

当前我们有一个需求就是,需要创建一张表,这张表要包括“姓名”,“年龄”,“工作地点”,而对于我们公司的员工,工作的地点就是那么几个,所以对于工作地点这一列,如果在一张表中实现,那么就会有很多重复的数据,这里就会有2个弊端

a、重复数据,会占用很大的硬盘空间

b、如果我们要更改某个地点的名称,那么我们就需要对所有在这个地点工作的信息都要更改

那么我们该如何解决呢?这里我们就可以用到外键的知识,我们可以创建两张表,第二张表专门用来存放工作地点的信息,效果如下

如果可以形成这样的对应关系,那么上面的两个问题就可以迎刃而解了

我们在mysql中就可以使用外键来解决这个问题

我们今天主要来学习一下如何对两张表格设置外键

方法1、我们可以先创建表,然后在配置外键信息

a、先创建两张表

b、我们为userinfo表和workaddress表分别插入数据

c、第三步,我们就要配置外键关系了,此时我们要约束userinfo表中的workaddres列中的内容必须是workaddress表中的workid中的内容

mysql> alter table userinfo add constraint fk_userinfo_workaddress foreign key u

serinfo(workaddress) references workaddress(workid);

d、我们测试我们的外键是否生效

从这里我们可以看到,我们如果插入一个workaddress为4的是可以成功的,因为workaddress中有workid为4的值,但是我们插入workaddress为5的数据就会失败,因为我们在workaddress表中没有值为5的数据,所以证明我们的外键是生效的

e、我们最后来说明一下添加外键的命令

红色框中的命令是命令的格式,必须要这么写

绿色框中的命令就需要我们根据实际情况来写

第一个绿色的框:外键的名称,这个可以任意取

第二个绿色的框:约束的表名称(要约束的列的名称),比如我们的userinfo表的workaddress列

第三个绿色的框:被约束的表的名称(被约束的列的名称),比如我们的workaddres表的workid列

方法2:我们也可以在创建的表的时候就配置外键关系,这里我们就把命令展示一下,就不用实例演示了,如果我们能看到方法1,那么方法2其实是很简单的。

mysql的外键知识的更多相关文章

  1. MySQL定义外键的方法

    MySQL定义外键的方法是每个学习MySQL的人都需要掌握的知识,下文就对MySQL定义外键的语句写法进行了详细的阐述,供您参考. 外键为MySQL带来了诸多的好处,下面就为您介绍MySQL定义外键的 ...

  2. MySQL数据库--外键约束及外键使用

    什么是主键.外键关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯 ...

  3. MySQL删除外键定义的方法

    MySQL外键在定以后,如果我们不再需要这个外键,可以进行删除操作,下面就为您介绍MySQL删除外键定义的方法,供您参考. 不知道大家有没有发现,在定义外键的时候articles.member_id外 ...

  4. MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作)

    MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作): a.创建2张表 create table userinfo(nid int not nul ...

  5. mysql添加外键无法成功的原因

    最近很忙,碰到很多问题都忘了发上来做个记录,现在又忘了,FUCK,现在碰到一个问题, 就是mysql添加外键总是无法成功,我什么都试了,就是没注意signed和unsigned,FUCK,因为我用my ...

  6. MySQL中MyISAM与InnoDB区别及选择,mysql添加外键

    InnoDB:支持事务处理等不加锁读取支持外键支持行锁不支持FULLTEXT类型的索引不保存表的具体行数,扫描表来计算有多少行DELETE 表时,是一行一行的删除InnoDB 把数据和索引存放在表空间 ...

  7. 第二百八十节,MySQL数据库-外键链表之一对多,多对多

    MySQL数据库-外键链表之一对多,多对多 外键链表之一对多 外键链表:就是a表通过外键连接b表的主键,建立链表关系,需要注意的是a表外键字段类型,必须与要关联的b表的主键字段类型一致,否则无法创建索 ...

  8. MySQL 建立外键约束

    http://www.jzxue.com/shujuku/mysql/201109/06-8742.html MySQL 建立外键约束的语法太晦涩难懂了, 不得不记下笔记. 1. 在建表时建立外键 C ...

  9. mysql:外键

    mysql:外键 转自:https://www.cnblogs.com/brucemengbm/p/6897410.html 一个班级的学生个人信息表: 什么是外键 在设计的时候,就给表1加入一个外键 ...

随机推荐

  1. Spring MVC 底层原理

    参考博客:http://www.cnblogs.com/xiaoxi/p/6164383.html Spring MVC处理的流程: 具体执行步骤如下: 1 首先用户发送请求给前端控制器,前端控制器根 ...

  2. MapReduce C++ Library

    MapReduce C++ Library for single-machine, multicore applications Distributed and scalable computing ...

  3. 【Python编程:从入门到实践】chapter6 字典

    chapter6 字典 6.1 一个简单的字典 6.2 使用字典 6.2.1 访问字典中的值 6.2.2 添加键值对 6.2.3 先创建一个空字典 6.2.4 修改字典中的值 6.2.5 删除键值对 ...

  4. Spark wordcount开发并提交到集群运行

    使用的ide是eclipse package com.luogankun.spark.base import org.apache.spark.SparkConf import org.apache. ...

  5. UML类图的画法

    http://blog.csdn.net/kevin_darkelf/article/details/11371353

  6. Distill详述「可微图像参数化」:神经网络可视化和风格迁移利器!

    近日,期刊平台 Distill 发布了谷歌研究人员的一篇文章,介绍一个适用于神经网络可视化和风格迁移的强大工具:可微图像参数化.这篇文章从多个方面介绍了该工具. 图像分类神经网络拥有卓越的图像生成能力 ...

  7. zabbixzabbix

    一,安装文档    https://www.zabbix.com/documentation/4.0/zh/manual/installation/requirements zabbix3.2.6安装 ...

  8. JavaScript判断浏览器及其版本信息

    通过window.navigator来判断: function getBrowserInfo(){ var Info = {}; var str = window.navigator.userAgen ...

  9. delphi ios grid BindSourceDB bug

    BindSourceDB4.DataSet :=nil; BindSourceDB4.DataSet :=FDMemTable1; grid绑定后显示数据正常,第二次赋值BindSourceDB4.D ...

  10. subnet partition

    例1:本例通过子网数来划分子网,未考虑主机数. 一家集团公司有12家子公司,每家子公司又有4个部门.上级给出一个172.16.0.0/16的网段,让给每家子公司以及子公司的部门分配网段. 思路:既然有 ...