mysql的外键知识
外键的作用
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的外键知识的更多相关文章
- MySQL定义外键的方法
MySQL定义外键的方法是每个学习MySQL的人都需要掌握的知识,下文就对MySQL定义外键的语句写法进行了详细的阐述,供您参考. 外键为MySQL带来了诸多的好处,下面就为您介绍MySQL定义外键的 ...
- MySQL数据库--外键约束及外键使用
什么是主键.外键关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯 ...
- MySQL删除外键定义的方法
MySQL外键在定以后,如果我们不再需要这个外键,可以进行删除操作,下面就为您介绍MySQL删除外键定义的方法,供您参考. 不知道大家有没有发现,在定义外键的时候articles.member_id外 ...
- MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作)
MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作): a.创建2张表 create table userinfo(nid int not nul ...
- mysql添加外键无法成功的原因
最近很忙,碰到很多问题都忘了发上来做个记录,现在又忘了,FUCK,现在碰到一个问题, 就是mysql添加外键总是无法成功,我什么都试了,就是没注意signed和unsigned,FUCK,因为我用my ...
- MySQL中MyISAM与InnoDB区别及选择,mysql添加外键
InnoDB:支持事务处理等不加锁读取支持外键支持行锁不支持FULLTEXT类型的索引不保存表的具体行数,扫描表来计算有多少行DELETE 表时,是一行一行的删除InnoDB 把数据和索引存放在表空间 ...
- 第二百八十节,MySQL数据库-外键链表之一对多,多对多
MySQL数据库-外键链表之一对多,多对多 外键链表之一对多 外键链表:就是a表通过外键连接b表的主键,建立链表关系,需要注意的是a表外键字段类型,必须与要关联的b表的主键字段类型一致,否则无法创建索 ...
- MySQL 建立外键约束
http://www.jzxue.com/shujuku/mysql/201109/06-8742.html MySQL 建立外键约束的语法太晦涩难懂了, 不得不记下笔记. 1. 在建表时建立外键 C ...
- mysql:外键
mysql:外键 转自:https://www.cnblogs.com/brucemengbm/p/6897410.html 一个班级的学生个人信息表: 什么是外键 在设计的时候,就给表1加入一个外键 ...
随机推荐
- python selenium 问题汇总
FAQ 1.python+selenium+Safari浏览器,定位元素 selenium.common.exceptions.ElementNotVisibleException: Message: ...
- 1041 Be Unique (20 分)
1041 Be Unique (20 分) Being unique is so important to people on Mars that even their lottery is desi ...
- shell脚本函数
不调用就不执行 调用就执行 调用时候的$1是指执行时候的参数1 调用之后的$是位置参数
- 解决IE下select标签innerHTML插入option的BUG(兼容
在ie下面使用innerHTML来插入option选项的话,ie会去掉前面的<option>,并拆分成多个节点,这样会造成select的出错 前言: 这是一个老bug了,现在提供一个完 ...
- elastix php session保存地点
这段时间要做 asterisk 的HA 放啊,需要同步session,所以做了下来研究. 1)elastix中的session 其实是存放在 /tmp/目录中的.可是/etc/php.ini中的[se ...
- javascript创建对象之构造函数模式(二)
对上一章节的工厂模式进行代码重写 function Human(name, sex) { this.name = name; this.sex = sex; this.say = function ( ...
- ZooKeeper系列 (4) 构建ZooKeeper应用
原文地址: http://www.cnblogs.com/wuxl360/p/5817540.html 一.配置服务 配置服务是分布式应用所需要的基本服务之一,它使集群中的机器可以共享配置信息中那些公 ...
- SSH 在ssh-copy-id 之后仍需输入密码的问题
最近在使用Ansible,基于SSH. 远程服务器IP: 192.168.200.193 以下提及的远程服务器都为该服务器. 远程用户: ansible_user 在本地服务器中,ssh-keygen ...
- tornado-输入
获取输入的信息: *** get_argument get_arguments 兼顾以下两种常用 能从url中获取 ?name=xiaoming 能从body中获取 form表 ...
- python学习笔记一和PHP的一些对比
python和php一样是 解释性语言 php和php一样 定义变量不需要指定类型,C语言中的print函数 在python中也是适用的 python编码 适用缩进 4个空格,通常存储为UTF-8模 ...