1.创建学生表(主表)

CREATE TABLE `stu` (
`stunum` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`sex` tinyint(1) NOT NULL,
PRIMARY KEY (`stunum`)
) ENGINE=InnoDB AUTO_INCREMENT=2017006 DEFAULT CHARSET=utf8mb4;
stunum name sex
2017001 王青 1
2017002 张红 0
2017003 李刚 1
2017004 赵三 1
2017005 陈晨 0

2.创建分数表(外键表)

CREATE TABLE `score` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`stunum` int(10) NOT NULL,
`math` int(2) NOT NULL,
`english` int(2) NOT NULL,
PRIMARY KEY (`id`),
KEY `fk_scroe_stunum` (`stunum`),
CONSTRAINT `fk_scroe_stunum` FOREIGN KEY (`stunum`) REFERENCES `stu` (`stunum`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2017011 DEFAULT CHARSET=utf8mb4;
id stunum math english
1 2017001 89 60
2 2017002 99 89
3 2017003 84 91
4 2017004 62 78
5 2017005 71 82

3.添加外键

ALTER TABLE `score` ADD
CONSTRAINT `fk_score_stunum` FOREIGN KEY (`stunum`) REFERENCES `stu` (`stunum`)
ON DELETE RESTRICT ON UPDATE CASCADE;
  • 什么是外键

a.从表(sub)的某列引用(ref)主表(main)的某列的值。比如学生表有个学生编号(sutnum),分数表中的学生列(sutnum)引用学生表的学 生编号,此时对于分数表的 stu 来说,学生表的 sutnum就是外键。

b.从表也叫外键表,主表也叫主键表、外表,列也叫字段。给表2添加一个外键,表2中的学号 字段就叫外键,它是表1学号字段的主键。通俗讲:表1的学号字段是表2的外键。

  • 外键的作用

a.在不设置外键的情况下,表2的学号字段和表1的学号字段是没有关联的。只是你自己认为他们有关系而已,数据库并 不认为它俩有关系。也就是说,你在表2的学号字段插了一个值(比如20140999999),但是这个值在表1中并没有,这个时候,数据库还是允 许你插入的,它并不会对插入的数据做关系检查。

b.然而在设置外键的情况下,你插入表2学号字段的值必须要求在表1的学号字段能找到。 同时,如果你要删除表1的某个学号字段,必须保证表2中没有引用该字段值的列,否则就没法删除。这就是所谓的保持数据的一致性和完整性。你想,如 果表2还引用表1的某个学号,你却把表1中的这个学号删了,表2就不知道这个学号对应的学生是哪个学生。数据的一致性还包括数据类型的一致性

  • 外键的使用规则

a.从表的字段必须与外键类型相同(如上,分数表 stu 的类型必须和学生表 stunum的类型相同,比如都是 int(10) 类型)

b.外键必须是主表的唯一键(如上,学生表 stunum是主键,而主键是唯一的,所以可以作为分数表 stu 的外键)

c.有关联的字段(如上,分数表之所以使用学生表的 stunum是因为两者有关联,分数表记录的是学生的分数,而学生可以用 stunum来唯 一标识)避免使用复合键(也就是说从表可以同时引用多个外表的字段作为一个外键,一般不推荐这种做法)

d.对于从表来说,外键不一定需要作为从表的主键,外键也不一定是外表的主键,外表的唯一键就可以作 为从表的外键。

初识Mysql 外键的更多相关文章

  1. mysql 外键约束备注

    梳理mysql外键约束的知识点. 1.mysql外键约束只对InnoDb引擎有效: 2.创建外键约束如下: DROP TABLE IF EXISTS t_demo_product; CREATE TA ...

  2. MySQL外键之级联

    简介 MySQL外键起到约束作用,在数据库层面保证数据的完整性.例如使用外键的CASCADE类型,当子表(例如user_info)关联父表(例如user)时,父表更新或删除时,子表会更新或删除记录,这 ...

  3. MySQL外键约束On Delete、On Update各取值的含义

    主键.外键和索引的区别?   主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 主索引(由关键字PRIMARY定义的索引) ...

  4. Mysql 外键设置

    MySql外键设置详解 (1) 外键的使用: 外键的作用,主要有两个:    一个是让数据库自己通过外键来保证数据的完整性和一致性    一个就是能够增加ER图的可读性    有些人认为外键的建立会给 ...

  5. MySQL外键的作用和创建

    MySQL外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据.使两张表形成关联,外键只能引用外表中列的值! 我们来建两个表 CREATE TABLE `example1` ( ` ...

  6. Mysql外键的使用

    MySQL外键(请确保数据库是innodb类型)网上有很多介绍的文章,这里我就凭自己的理解再次整理了下,废话不多说,直入正题哈.外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据 ...

  7. mysql 外键和子查询,视图

    1.mysql 外键约束 建表时生成外键   foreing key ('sid') references' student'('id'); 建表后添加外键  alter table' course ...

  8. mysql外键使用和事物使用

    mysql外键功能主要是为了保证关联表数据的一致性,主要目的是控制存储在外键表中的数据. 使两张表形成关联,外键只能引用外表中的列的值! 例如: a b 两个表 a表中存有 客户号,客户名称 b表中存 ...

  9. Mysql外键设置中的CASCADE、NO ACTION、RESTRICT、SET NULL

    转: Mysql外键设置中的CASCADE.NO ACTION.RESTRICT.SET NULL 2017年06月11日 10:03:13 雅静8 阅读数:5491   版权声明:本文为博主原创文章 ...

随机推荐

  1. python自动化测试开发利器ulipad最佳实践(可写python测试代码也可编写selenium、Appium等)...

    介绍 UliPad是一个国人开发的python轻量级编辑器,导向和灵活的编程器.它如类浏览器,代码自动完成许多功能,如:HTML查看器,目录浏览器,向导等. 下载与安装 下载地址:https://py ...

  2. 如何在linux服务器下快速安装配置Node.js

    简单粗暴,先用xshell或其他软件连接服务器 1.下载(此处版本根据官网版本自己修改) wget https://npm.taobao.org/mirrors/node/v8.9.3/node-v8 ...

  3. Java.lang.String类

    1.String类定义   String 字符串对象本质上是一个 final 修饰的字符串数组对象, java字符串就是Unicode字符序列. 因为被final修饰, 所以字符串是常量,它们的值一旦 ...

  4. Spring中资源的加载原来是这么一回事啊!

    1. 简介 在JDK中 java.net.URL 适用于加载资源的类,但是 URL 的实现类都是访问网络资源的,并没有可以从类路径或者相对路径获取文件及 ServletContext , 虽然可以通过 ...

  5. C. Helga Hufflepuff's Cup 树形dp 难

    C. Helga Hufflepuff's Cup 这个题目我感觉挺难的,想了好久也写了很久,还是没有写出来. dp[i][j][k] 代表以 i 为根的子树中共选择了 j 个特殊颜色,且当前节点 i ...

  6. 初识Matlab及界面认识

    通过本章节的学习,需要掌握: MATLAB语言是什么 MATLAB在互联网语言中地位与应用 目标:利用MATLAB进行问题求解的基本规律.够使用MATLAB作为专业应用的工具. 1.什么叫计算? (1 ...

  7. Python 记录日志文件

    1.打印到控制台 # -*- coding: UTF-8 -*- import logging def logFileTest(): logging.debug('This is debug') lo ...

  8. 【Hadoop离线基础总结】网站流量日志数据分析系统

    目录 点击流数据模型 概述 点击流模型 网站流量分析 网站流量模型分析 网站流量来源 网站流量多维度细分 网站内容及导航分析 网站转化及漏斗分析 流量常见分析角度和指标分类 指标概述 指标分类 分析角 ...

  9. 【MySQL基础总结】运算符的使用

    运算符的使用 算数运算符 比较运算符 结果只能为TRUE(1)或FALSE(0) 逻辑运算符 运算符的优先级 可以通过括号改变优先级 示例 算数运算符 比较运算符 逻辑运算符

  10. [zoj 3416/hdu 3709]数位DP

    题意:求从区间[L, R]内有多少个数是平衡数,平衡数是指以10进制的某一位为中心轴,左右两边的每一位到中心轴的距离乘上数位上的值的和相等.0<=L<=R<=1e18 思路:由于任何 ...