什么是外键?

外键   ( foreign key )   是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。

为什么要使用外键?

  保证数据的参照完整性。

不用会怎样?

不用也不会怎么样,如果一个健壮的系统,数据库中的数据一定有很好的参照完整性,如果不用外键,就要多写代码对数据的完整性进行额外的判断 。

外键的作用很重要,最好在数据库中使用。

下面举一个栗子就会明白。

比如有两张表格,一个是学生档案,另一个是上学期间的成绩单

档案中会有:学号,姓名。(学号为主键)   
             成绩单有(这里尽量简化):学期号,学号,平均分数(学期号,学号两个同时为主键,学号同时为外键)   
             为了保证成绩单上的数据有效,所以要求录入学号时,必需保证档案中有这个学号,否则就不能录入。 从而保证了成绩单上的成绩数据的引用完整,否则将会是垃圾数据。

如果用程序控制,有很多缺点;录入成绩单时为了保证学号有效,首先要搜索档案,当档案很大时会影响效率。程序控制并不能保证百分之百引用完整性,尤其是并发操作。

说一个特例(主要是说明程序控制不好): 此例的操作流程正确与否不重要,但说明了程序控制并不是好方法。  
              比如: A录入成绩单,B在编辑档案。   
        当A录入张三的成绩,保存时,搜索张三存在,于是程序下一步就要存盘,但这时B恰好把张三删除了。但A那边的程序并不知道,于是就把一条垃圾数据存进数据库中了。

转载于:https://www.cnblogs.com/lc2817/p/11271384.html

什么是外键?为什么要使用外键?相关推荐

  1. mysql支持UUID做外键_多表外键下将普通的id主键更新为uuid主键

    多表外键下将普通的id主键更新为uuid主键 2019-05-20 02:45:37 来源: 晴天小雨 0 摘要:在多表外键影响和保证数据不删除的前提下,借助Flask-sqlalchemy插件及SQ ...

  2. 修改表结构添加外键约束,默认外键名

    2019独角兽企业重金招聘Python工程师标准>>> 修改表结构添加外键约束,默认外键名 alter table SUPPLIER_INFO add foreign key (CR ...

  3. 超键、候选键、主键、外键、联合主键、复合主键

    首先看看各种键的定义: 超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键(只要有一个键唯一,再随便组其他的键,合起来叫主键) 候选键(candidatekey):不含有多余 ...

  4. 数据库中什么是主键,什么是外键?

    数据库中什么是主键,什么是外键? 作者:不染丹心  来源:博客园  发布时间:2009-12-17 22:57  阅读:128 次  原文链接   [收藏]   这需要理清几个概念: 1)候选键: 关 ...

  5. mysql表定义外键语法_mysql设置外键的语法怎么写?

    2012-08-31 回答 mysql外键设置详解 (1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加er图的可读性 有些人认为外键 ...

  6. 菜鸟学数据库(四)——超键、候选键、主键、外键

    这些年的一些经历告诉我,很多初学者搞不清超键.候选键等,被数据库中的各种键搞的一头雾水.下面就跟大家一起聊聊数据库中的那些键. 首先看看各种键的定义: 超键(super key):在关系中能唯一标识元 ...

  7. 是否有必要使用外键?为什么不用外键?

    什么是外键: 如果一个实体的某个字段指向另一个实体的主键,就称为外键.被指向的实体,称之为主实体(主表),也叫父实体(父表).负责指向的实体,称之为从实体(从表),也叫子实体(子表) 外键的作用: ① ...

  8. 超键、候选键、主键、外键区别?

    超键.候选键.主键区别? 超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键. 候选键(candidate key):不含有多余属性的超键称为候选键. 主键(primary ...

  9. mysql 所有外键_mysql中的外键

    mysql中的外键 1.默认的外键存在之后,会对数据进行约束. 1)约束1:如果子表中添加的数据,外键字段对应的数据如果在父表中不存在,那么添加失败. 有数据之后: 修改:可以修改跟外键不相关的任何字 ...

  10. 外键查询_详解MySQL数据库删除所有表的外键约束、禁用外键约束相关脚本

    概述 数据库的外键虽然能保证数据数据一致性和完整性,但是也一定程度地影响了数据更新的性能.在开发中,我们使用PowerDesigner建立物理数据模型时,为了结构的清晰,增加可读性,会创建表与表之间的 ...

最新文章

  1. 《数据库技术原理与应用教程》一3-5信息世界与逻辑模型
  2. 姚殊清华计算机科学与技术,王道顺(清华大学计算机科学与技术系副教授)_百度百科...
  3. moxy json介绍_通过MOXy实现使您的JAXB更清洁
  4. 怎么用睡袋拉人_宝宝晚上翻身踢被子又着凉了,别再盖被子,给宝宝穿婴儿睡袋吧...
  5. pygame-KidsCanCode系列jumpy-part6-主角挂掉重新开始
  6. 记录一次配置unix网络编程环境的过程和遇到的问题
  7. VPP-20.09版本安装教程(联网版)
  8. keil4 mdk安装教程
  9. 力扣第 295 场周赛:6080. 使数组按非递减顺序排列
  10. SQL Server 日期 字符串 格式转换 函数 datetime convert
  11. 计算机系统还原后 桌面不显示图标,电脑桌面图标不见了怎么恢复原状?电脑桌面便签不见了怎么找回...
  12. php 九宫格验证码,PHP+Ajax微信手机端九宫格抽奖实例
  13. SolidWorks+thonny esp32 电磁控制,程序算法搞起来了,我的结构-仿真-电磁-控制-算法的学习之路
  14. 利元转债,奕瑞转债上市价格预测
  15. C/C++黑魔法-三元运算符简洁写法
  16. win10计算机服务打不开,windows10设置打不开怎么办_win10设置功能打不开解决方法...
  17. 神思二代身份证读卡器Demo的C++版本
  18. Redis缓存吊打面试官 25 问
  19. 双非本科,外包上岸,从“临时工”到阿里25Koffer的大佬,我花了3年
  20. 输入一个N整数,结果为1 23 456 78910

热门文章

  1. nessus的安装以及使用(带详细步骤)
  2. Go 1.16 即将到来的函数:ReadDir 和 DirEntry
  3. python的twisted
  4. C++实现位图的旋转
  5. java.lang.IllegalArgument.Exception:Malformed
  6. 部署owncloud连接ladp迁移数据
  7. Ubuntu 23.04、22.04、20.04、18.04国内源--阿里云、中科大、163、清华更新源(sources.list)
  8. 新目标视听说教程1-4
  9. 贝贝网融资一亿美金,唱衰垂直电商是否言之过早?
  10. Java:使用split方法时忽略中英文的符号区别