外键的作用

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 原生API

    原生API: Servlet环境中一些有用的对象: HttpServletRequest HttpServletResponse HttpSession Reader Writer InputStre ...

  2. CentOS修改TimeZone

    查看: date -R +0800   修改: sudo rm -rf /etc/localtime sudo cp /usr/share/zoneinfo/America/Los_Angeles / ...

  3. PHP 算术运算符

    PHP 算术运算符 运算符 名称 描述 实例 结果 x + y 加 x 和 y 的和 2 + 2 4 x - y 减 x 和 y 的差 5 - 2 3 x * y 乘 x 和 y 的积 5 * 2 1 ...

  4. 网卡虚拟化技术:VMDq和SR-IOV

    通常情况下,一个服务器上跑几十个虚机,对计算和网络的需求是很惊人的.前者促生了当下的多核技术发展,后者则不能简单的用多网卡来实现.试想,每个虚机如果都需要10G的交换能力,服务器要配置几十块物理网卡, ...

  5. Executor框架(四)周期/延时任务ScheduleThreadPoolExecutor

    ScheduledThreadPoolExecutor 介绍   ScheduledThreadPoolExecutor 是一个可以实现定时任务的 ThreadPoolExecutor(线程池).比 ...

  6. 数据库,mysql

    数据库(`database`): ### 关系型数据库及非关系型数据库1. 什么是关系型数据库? 关系型数据库是一种建立在关系模型上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据.现实世 ...

  7. 网络层-IP地址

    以下内容是IPv4 IP地址长度32位,Java里面一个int的长度,总共分为5类IP地址 1:分类编址 A类IP地址0开头:           A类有31个位置可以变化,总数是2^31个, [(0 ...

  8. OpenACC 《大规模并行处理器编程实战》教材讲解

    ▶ <大规模并行处理器编程实战>第15章,关于OpenACC 的部分,散点 ● OpenACC 中,主机存储器和设备存储器是分开处理的,程序员只要制定要传输的存储器对象即可,编译器会自动生 ...

  9. JAVA 整合 SSM (Spring + SpringMVC + MyBatis)

    < 一 > POM 配置文件 ( 如果出现 JAR 包 引入错误, 请自行下载 ) <project xmlns="http://maven.apache.org/POM/ ...

  10. PCI Simple Communications Controller

    PCI Simple Communications Controller Intel Management Engine Interface (MEI)