主外键和外键约束

主键

主键(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. P1160 队列安排
  2. WebWork深度探索之号外
  3. 报告显示:2018年北京人工智能相关产业达1500亿元
  4. shiro 实现登录验证功能
  5. Eclipse安装Hadoop插件配置Hadoop开发环境
  6. 2020-11-25(多级页表的补充)
  7. c++ primer 5th,练习11.19,编写代码验证
  8. amd cpu不能在cmd环境下运行java代码_00 开发环境搭建
  9. Replication Backlog
  10. php mysql 简单,你想不到的最简单php操作MySQL
  11. python相关系数显著性检验_Python+pandas计算数据相关系数的实例
  12. 1208_MISRA_C规范学习笔记_Rule 10.3 Rule 10.5
  13. h5课件制作_教师必备:实用H5课件制作技巧
  14. linux运行img文件格式,img是什么格式?img文件怎么打开?
  15. 全链路UI设计师了解一下
  16. php csv文件转json,php csv如何转json
  17. 关于Kubernetes中API Server使用token、kubeconfig文件认证的一些笔记
  18. java remove removeat_Java PriorityQueue删除任意元素的性能
  19. java组织机构代码验证规则
  20. 印象笔记Mac版的快捷键有哪些?

热门文章

  1. redo equalization梳理
  2. Mysql 学习(一)
  3. Google Earth Engine(GEE)——NDVI、NDWI和NDBI用来进行增加分类精度的验证结果(随机森林和cart分类)
  4. 比尔盖茨十条职场箴言:世界不在意你的自尊
  5. 蓝光播放机 - 索尼和松下的新阵容
  6. 东芝发布战略重组以提升股东价值的最新进展
  7. 从零开始的 Rust 语言 blas 库之预备篇(1)—— blas 基础介绍
  8. PostgreSQL 动态表复制(CREATE TABLE ASCREATE TABLE LIKE)
  9. Android播放无声音,Android呼叫Mediaplayer播放无声音频
  10. 华为端口聚合命令_华为端口聚合和trunk区别?