什么是外键?为什么要使用外键?
什么是外键?
外键 ( foreign key ) 是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。
为什么要使用外键?
保证数据的参照完整性。
不用会怎样?
不用也不会怎么样,如果一个健壮的系统,数据库中的数据一定有很好的参照完整性,如果不用外键,就要多写代码对数据的完整性进行额外的判断 。
外键的作用很重要,最好在数据库中使用。
下面举一个栗子就会明白。
比如有两张表格,一个是学生档案,另一个是上学期间的成绩单
档案中会有:学号,姓名。(学号为主键)
成绩单有(这里尽量简化):学期号,学号,平均分数(学期号,学号两个同时为主键,学号同时为外键)
为了保证成绩单上的数据有效,所以要求录入学号时,必需保证档案中有这个学号,否则就不能录入。 从而保证了成绩单上的成绩数据的引用完整,否则将会是垃圾数据。
如果用程序控制,有很多缺点;录入成绩单时为了保证学号有效,首先要搜索档案,当档案很大时会影响效率。程序控制并不能保证百分之百引用完整性,尤其是并发操作。
说一个特例(主要是说明程序控制不好): 此例的操作流程正确与否不重要,但说明了程序控制并不是好方法。
比如: A录入成绩单,B在编辑档案。
当A录入张三的成绩,保存时,搜索张三存在,于是程序下一步就要存盘,但这时B恰好把张三删除了。但A那边的程序并不知道,于是就把一条垃圾数据存进数据库中了。
转载于:https://www.cnblogs.com/lc2817/p/11271384.html
什么是外键?为什么要使用外键?相关推荐
- mysql支持UUID做外键_多表外键下将普通的id主键更新为uuid主键
多表外键下将普通的id主键更新为uuid主键 2019-05-20 02:45:37 来源: 晴天小雨 0 摘要:在多表外键影响和保证数据不删除的前提下,借助Flask-sqlalchemy插件及SQ ...
- 修改表结构添加外键约束,默认外键名
2019独角兽企业重金招聘Python工程师标准>>> 修改表结构添加外键约束,默认外键名 alter table SUPPLIER_INFO add foreign key (CR ...
- 超键、候选键、主键、外键、联合主键、复合主键
首先看看各种键的定义: 超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键(只要有一个键唯一,再随便组其他的键,合起来叫主键) 候选键(candidatekey):不含有多余 ...
- 数据库中什么是主键,什么是外键?
数据库中什么是主键,什么是外键? 作者:不染丹心 来源:博客园 发布时间:2009-12-17 22:57 阅读:128 次 原文链接 [收藏] 这需要理清几个概念: 1)候选键: 关 ...
- mysql表定义外键语法_mysql设置外键的语法怎么写?
2012-08-31 回答 mysql外键设置详解 (1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加er图的可读性 有些人认为外键 ...
- 菜鸟学数据库(四)——超键、候选键、主键、外键
这些年的一些经历告诉我,很多初学者搞不清超键.候选键等,被数据库中的各种键搞的一头雾水.下面就跟大家一起聊聊数据库中的那些键. 首先看看各种键的定义: 超键(super key):在关系中能唯一标识元 ...
- 是否有必要使用外键?为什么不用外键?
什么是外键: 如果一个实体的某个字段指向另一个实体的主键,就称为外键.被指向的实体,称之为主实体(主表),也叫父实体(父表).负责指向的实体,称之为从实体(从表),也叫子实体(子表) 外键的作用: ① ...
- 超键、候选键、主键、外键区别?
超键.候选键.主键区别? 超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键. 候选键(candidate key):不含有多余属性的超键称为候选键. 主键(primary ...
- mysql 所有外键_mysql中的外键
mysql中的外键 1.默认的外键存在之后,会对数据进行约束. 1)约束1:如果子表中添加的数据,外键字段对应的数据如果在父表中不存在,那么添加失败. 有数据之后: 修改:可以修改跟外键不相关的任何字 ...
- 外键查询_详解MySQL数据库删除所有表的外键约束、禁用外键约束相关脚本
概述 数据库的外键虽然能保证数据数据一致性和完整性,但是也一定程度地影响了数据更新的性能.在开发中,我们使用PowerDesigner建立物理数据模型时,为了结构的清晰,增加可读性,会创建表与表之间的 ...
最新文章
- 《数据库技术原理与应用教程》一3-5信息世界与逻辑模型
- 姚殊清华计算机科学与技术,王道顺(清华大学计算机科学与技术系副教授)_百度百科...
- moxy json介绍_通过MOXy实现使您的JAXB更清洁
- 怎么用睡袋拉人_宝宝晚上翻身踢被子又着凉了,别再盖被子,给宝宝穿婴儿睡袋吧...
- pygame-KidsCanCode系列jumpy-part6-主角挂掉重新开始
- 记录一次配置unix网络编程环境的过程和遇到的问题
- VPP-20.09版本安装教程(联网版)
- keil4 mdk安装教程
- 力扣第 295 场周赛:6080. 使数组按非递减顺序排列
- SQL Server 日期 字符串 格式转换 函数 datetime convert
- 计算机系统还原后 桌面不显示图标,电脑桌面图标不见了怎么恢复原状?电脑桌面便签不见了怎么找回...
- php 九宫格验证码,PHP+Ajax微信手机端九宫格抽奖实例
- SolidWorks+thonny esp32 电磁控制,程序算法搞起来了,我的结构-仿真-电磁-控制-算法的学习之路
- 利元转债,奕瑞转债上市价格预测
- C/C++黑魔法-三元运算符简洁写法
- win10计算机服务打不开,windows10设置打不开怎么办_win10设置功能打不开解决方法...
- 神思二代身份证读卡器Demo的C++版本
- Redis缓存吊打面试官 25 问
- 双非本科,外包上岸,从“临时工”到阿里25Koffer的大佬,我花了3年
- 输入一个N整数,结果为1 23 456 78910
热门文章
- nessus的安装以及使用(带详细步骤)
- Go 1.16 即将到来的函数:ReadDir 和 DirEntry
- python的twisted
- C++实现位图的旋转
- java.lang.IllegalArgument.Exception:Malformed
- 部署owncloud连接ladp迁移数据
- Ubuntu 23.04、22.04、20.04、18.04国内源--阿里云、中科大、163、清华更新源(sources.list)
- 新目标视听说教程1-4
- 贝贝网融资一亿美金,唱衰垂直电商是否言之过早?
- Java:使用split方法时忽略中英文的符号区别