主外键和外键约束

主键

主键(primary key):一列(或一组列),其值能够唯一区分表中每个行 。

外键

外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系

什么是外键约束

右边的DepartmentID是外键。 外键约束是指用于在两个表之间建立关系,需要指定引用主表的哪一列。

On Delete

On Delete可能取值如上图为:No Action, Cascade,Set Null, Restrict属性。 1. No Action / Restrict 当取值为No Action或者Restrict时,则当在父表(主表)(即外键的来源表)中删除对应记录时,首先检查该记录对应的从表是否有对应外键,如果有则不允许删除。 2. Cascade(级联) 当取值为Cascade时,则当在父表(主表)(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。(一起删除) 3. Set Null 当取值为Set Null时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

On Update

On Update可能取值如上图为:No Action, Cascade,Set Null, Restrict属性。(更新的是外键的值)No Action / Restrict 当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新。

Cascade(级联) 当取值为Cascade时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也更新外键在子表(即包含外键的表)中的记录。

Set Null 当取值为Set Null时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

理解示例

表结构

学生表(学号,姓名,性别,班级) // 学号唯一,能确定学生表的一行课程表(课程编号,课程名,学分) // 课程编号唯一,能确定课程表的一行成绩表(学号,课程号,成绩) // 学号和课程号才能唯一确定哪个人哪门课得了多少分,学号和课程号这两列为主键

具体分析

以上面的成绩表为例,学号和课程号是成绩表的主键,那么学号是成绩表的外键还是学生表的外键?当然是成绩表的外键,因为学号是学生表的主键呀,怎么可能是外键?同理成绩表课程号也应该是成绩表的外键。 其实,外键主要建立与其他表的联系,如果我们想知道成绩表中某一行成绩是谁考的,啥性别,在哪个班级,就可通过成绩表的外键学号与学生表建立一种关系。

restrict 外键约束_主外键和外键约束相关推荐

  1. mysql 添加外键 完整_详解mysql添加外键的方法

    本文主要向大家介绍了mysql添加外键的方法,通过具体的实例让大家了解,希望对大家学习mysql有所帮助. 为已经添加好的数据表添加外键: 语法:alter table 表名 add constrai ...

  2. mysql主键标识_实体标识与数据库主键

    今天,我们将讨论DDD意义上的标识与数据库主键之间的区别. 我们经常将两者混合在一起,但它们真的是一回事吗? 实体标识 在DDD的背景下,标识是实体固有的东西. 只有实体拥有它; 它是用于区别于所有其 ...

  3. mysql级联删除外键约束_玩转MySQL的外键约束之级联删除篇

    [IT168 文档]如今,许多关系型数据库管理系统都提供了外键约束这一强大的功能特性,它能够帮助我们自动地触发指定的动作,诸如删掉.更新数据库表的记录等,从而维护各数据库表之间预定义的关系.本文将演示 ...

  4. 数据库 外键 优缺点_不同数据格式的优缺点:键值与元组

    数据库 外键 优缺点 by Hieu Nguyen (Jack) 由Hieu Nguyen(Jack) 不同数据格式的优缺点:键值与元组 (The pros and cons of different ...

  5. mysql非主键索引_主键索引和非主键索引的区别

    1. 什么是最左前缀原则? 以下回答全部是基于MySQL的InnoDB引擎 例如对于下面这一张表 如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结构如下 如果我们要进行模糊查 ...

  6. mysql非主键索引_主键索引和非主键索引解析

    1. 什么是最左前缀原则? 以下回答全部是基于MySQL的InnoDB引擎 例如对于下面这一张表 如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结构如下 如果我们要进行模糊查 ...

  7. 华为虚拟home键关闭_华为P20怎么隐藏虚拟键?前置指纹键可轻触返回!

    华为P20采用新一代HUAWEIFullViewDisplay屏幕技术,超高屏占比及极窄边框,带来沉浸式视觉感官体验,游戏娱乐更酣畅,显示信息更多,阅读更高效.采用双面玻璃机身设计,玻璃弧度曲线设计符 ...

  8. 怎么分辨是不是外包工司_花2万做外装农村自建房秒变别墅,农村工头:这还让人怎么混?...

    设计很重要,施工更重要,外装最重要. 建房花了不少钱,费力操心,可外观往往变了样.走了型. 反面案例 在农村建别墅,外墙装修是个很大的痛点,而很多建房朋友往往是不知道怎么装好看,也不知道该找谁做.村里 ...

  9. templet 显示字段外键对应名_主外键和外键约束

    主外键和外键约束 主键 主键(primary key):一列(或一组列),其值能够唯一区分表中每个行 . 外键 外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个 ...

最新文章

  1. 趣图:好好干,今天再加个班
  2. HTTP状态码和支持的方法
  3. elementui的el-tree第一次加载无法展开和选中的问题
  4. 机器学习技法-随机森林(Random Forest)
  5. HDU [P3605] Escape
  6. 生产环境可以用吗_小型熔喷布设备可以生产出好的熔喷布吗?
  7. 默认轮播,鼠标移入停止,移出继续
  8. 数字化技术浪潮下,医院临床科研如何「华丽变身」
  9. C++:类的成员函数
  10. 2011年白银机会远超黄金 四妙招帮您赚大
  11. HTC公布多款Android新机系统内核源代码
  12. 突发 , 谷歌官宣安卓改名了!
  13. ansible 通过加密码来批量管理主机及管理Windows主机
  14. Qt QBoxLayout QVBoxLayout QGridLayout 清空布局内widget的正确做法
  15. 小程序源码:首席省钱赚钱专家微信小程序源码下载,淘宝客 外卖侠 外卖cps -多玩法安装简单
  16. win10计算机管理看不见蓝牙,解决win10蓝牙开关不见了的方法
  17. 一道携程SQL笔试题
  18. Android开发——ListView局部刷新的实现
  19. IT项目管理表格集合
  20. Kafka 集群搭建

热门文章

  1. Excel 字符串拼接
  2. typedef重命名
  3. 【面经】美团——后台开发
  4. 求幂级数展开的部分和 C语言 PTA 详解
  5. 服务器中Anaconda3安装与使用
  6. react脚手架日常学习记录
  7. SAP ALV 详细说明
  8. Cardboard虚拟现实开发初步(一)
  9. Android标签流控件的实现
  10. js时间戳与日期格式的转换