如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。
中文名
外键
外文名
foreign key别 名
外码、外关键字
应用学科
数据库
作 用
外键定义
编辑
外键定义设F是基本关系R的一个或一组属性,但不是关系的键,Ks是基本关系S的主键。如果F与Ks相对应,则称F是R的外键,并称基本关系R为参照关系,基本关系S为被参照关系或目标关系。
换而言之,如果关系模式R中的某属性集不是R的主键,而是另一个关系R1的主键则该属性集是关系模式R的外键,通常在数据库设计中缩写为FK。
在实际操作中,将一个表的值放入第二个表来表示关联,所使用的值是第一个表的主键值(在必要时可包括复合主键值)。此时,第二个表中保存这些值的属性称为外键(foreign key)。[1]
显然目标关系的主码和参照关系的外码必须定义在一个或同一组的域上。关系R和S不一定是不同的关系,即外键不一定要与相应的主键同名。如在学生(学号,姓名,性别,专业号,年龄,班长)关系中,“学号”是主键,“班长”属性表示该学生所在班级的班长的学号,它引用了本关系中“学号”属性,因此“班长”是外键,这里学生关系既是参照关系也是被参照关系。不过在实际应用中为了便于识别,当主键与相应的外键属于不同关系时,往往取相同的名字。[2]
外键作用
编辑
保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值。[3]
图1 控制存储在外键表中的数据学号在成绩表(表2)中是主键,在学生表(表1)中是外键。如果不使用外键,表1的学号字段插了一个值(比如20140999999),但是这个值在表2中并没有,这个时候,数据库允许插入,并不会对插入的数据做关系检查。然而在设置外键的情况下,插入表1学号字段的值必须要求在表1的学号字段能找到。 同时,如果要删除表2的某个学号字段,必须保证表2中没有引用该字段值的列,否则就没法删除。这就是所谓的保持数据的一致性和完整性。如图1,如果表1还引用表2的某个学号,却把表1中的这个学号删了,表2就不知道这个学号对应的学生是哪个学生。
数据库中的表必须符合规范,才能杜绝数据冗余、插入异常、删除异常等现象。规范的过程是分解表的过程。经过分解,同一事物的代表属性出现在不同的表中。显然,它们应该保持一致。外键的值或者是另外一个表的主键值或者为空值。学号在学生表里是主键,在成绩表里是外键。成绩表里的学号一定要是学生表里的学号。于是,学生表里的学号和成绩表里的学号就一致了。可以直观地理解,外键的功能是实现同一事物在不同表中的标志一致性。功能的实现由外键联系的两个表,在单独操作时,外键功能由两种方法实现[4]
阻止执行从表插入新行,其外键值不是主表的主键值便阻止插入;
从表修改外键值,新值不是主表的主键值便阻止修改;
主表修改主键值,连带从表相关行的外键值一起修改。两种方法提供给用户选择。无论选取哪种方法,从表里都不会有多余行。从另一个角度理解,用拒绝同一事物在从表中的标志与主表不一致来实现与主表中的标志一致。
两种实现方法,通过下面方式选择:界面:设级联更新、级联删除两个选择方框,选取则级联执行、不选取则阻止执行;
命令:设E)kSCM)E、RESTRICT两个可选项,CASCADE为级联执行、RESTRICT为阻止执行。
外键应用
编辑
外键示例
student(s#,sname,d#),即学生这个关系有三个属性:学号,姓名,所在系别。
dep(d#,dname),即院系有两个属性:系号、系名。
则s#、d#是主键,也是各自所在关系的唯一候选键,d#是student的外键。
建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表主键)。
指定外键关键字: foreign key(列名)
引用外键关键字: references (主表主键)
事件触发限制: on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action
例如:
outTable表主键id 类型 int
创建含有外键的表:
说明:把id列 设为外键 参照外表outTable的id列 当外键的值删除 本表中对应的列删除 当外键的值改变 本表中对应的列值改变。
注:在创建表中增加外键的触发事件是不行的,
外键使用原则
使用原则1、 为关联字段创建外键。
2、 所有的键都必须唯一。
3、避免使用复合键。
4、外键总是关联唯一的键字段。
外键使用方法
主键表和外建表:
使用设计界面创建外键时,出现主键表和外建表问题,上述使个人理解有误:
TABLE2 中引用了TABLE1,在此TABLE1为主键表,而TABLE2 为外键表。
总结:主键表是被引用的表,外键表是引用其他表的表。
外键有效性
有很多时候,程序员会发现字段缺少、多余问题或者是创建外键以后就不能添加没有受约束的行[特殊情况下是有必要的],这个时候不想对表结构进行操作,就可以使用约束失效。
以 Northwind 为例:想给产品表【Products表】添加一条不受种类表【Categories表】限制的数据。可以使产品表中的 Categories 约束失效。
添加完成后再使其有效:
这样就完成不受某表约束的数据添加了。
还有一个好处是:如上述例子。修改 Categories 表时 添加字段时 要把所有引用 Categories 表的外键给失效。等给 Categories 表添加字段完成后再使所有应用 Categories 表的外键恢复有效性即可。
在 MySQL 数据库中,多版本并发控制(Multiversion Concurrency Control,MVCC)是一种用于实现并发事务处理的机制。它允许多个事务同时对数据库进行读写操作,而不会相互阻塞,从而提高了数据库的并发性能。本文将详细介绍 MySQL 中的 MVCC 是什么。一、MVCC 的基本概念MVCC 是一种通过维护多个版本的数据来实现并发控制的技术。在 MVCC 中,每个事
大家好,我是小2,一个程序员,也是一个奶爸~一. 问题描述我们在设计表结构的时候,设计规范里面有一条如下规则:对于可变长度的字段,在满足条件的前提下,尽可能使用较短的变长字段长度。为什么这么规定?我在网上查了一下,主要基于两个方面基于存储空间的考虑基于性能的考虑网上说Varchar(50)和varchar(500)存储空间上是一样的,真的是这样吗?基于性能考虑,是因为过长的字段会影响到查询性能?本
在数据库设计和开发过程中,索引是提高查询性能的重要工具。合理的索引命名规范不仅能提高代码的可读性,还能便于维护和管理。本文将详细介绍MySQL数据表索引的命名规范,包括不同类型索引的命名方法,并提供多个代码示例以说明如何命名和创建索引。目录引言索引的作用索引的类型主键索引唯一索引普通索引全文索引组合索引索引命名规范主键索引命名规范唯一索引命名规范普通索引命名规范全文索引命名规范组合索引命名规范示例
在数据库设计中,理解“外码”概念至关重要。外码(Foreign Key)用于在数据库表之间建立关联,确保数据的完整性和一致性。在MySQL和其他关系型数据库中,外码是实现数据关联和遵循参照完整性的关键。本篇文章将详细介绍“mysql外码是什么”的问题解决过程,包括环境预检、部署架构、安装过程、依赖管理、故障排查、扩展部署六个部分。## 环境预检在开始之前,我们需要对环境进行预检以确保一切顺
# MySQL 外码命名指南在数据库设计中,外码(Foreign Key)的使用至关重要,它帮助我们在不同的表之间建立联系。对于初学者而言,了解外码的命名规则和使用流程是非常重要的。本文将介绍 MySQL 外码的命名,提供一个清晰的流程以及代码示例,帮助你轻松上手。## 外码命名流程我们可以将外码的命名流程分为以下几个步骤:| 步骤 | 内容
# MySQL数据库的外键(外码)详解在关系型数据库中,外键(Foreign Key)是一种约束,用于建立和加强两个数据表之间的关系。外键约束确保一个表中的某个字段只允许存在于另一个表中,这样可以保持数据的完整性与一致性。本文将深入探讨MySQL数据库中的外键,提供代码示例,并通过类图与状态图阐明其关系与状态变迁。## 外键的基本概念外键是指在一个表中存在的字段,它指向另一个表的主键。
在MySQL中,外码(Foreign Key)是指一种用于建立和增强两个数据表之间的关系的字段,它确保了在一个表中引用另一个表中的数据的完整性。通过使用外码,数据的约束变得更严格,能够防止无效的数据插入。### 背景定位在数据管理中,外码的设计不仅能够提高数据的完整性,还能提升应用的运行效率。然而,在实际应用中,不恰当的外码设计可能导致系统性能下降或者甚至业务中的数据一致性问题。比如,外码
## 在MySQL数据库中定义外键外键(Foreign Key)是用来链接两张表的数据的字段,它确保了数据的一致性和完整性。在MySQL中,外键用于强制两个表之间的关系,同时也可以避免在一个表中插入不在另一个表中的值。本文将逐步指导你如何在MySQL中定义外键,并附上相关代码和解释。### 过程概述首先,我们需要了解在MySQL中定义外键的基本过程。以下是整个流程的简单表格:| 步
haomingwen我们常说汉字的"内码"与"外码"。内码是汉字在计算机内部存储,处理和传输用的信息编码。它必须与ASCII码兼容但又不能冲突。所以把国标码两个字节的最高位置'1',以区别于西文,这就是内码。汉字的输入码称为"外码"。输入码即指我们输入汉字时使用的编码。常见的外码分为数字编码(如区位码),拼音编码和字形编码(如五笔)。再说区位码,"啊"的区位码是1601,写成16进制是0x10,0
一、什么是主键、外键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是一个主键 成绩表(学号
关联关系之表设计外键: 用来建立关系的字段称为外键主键: 用来表示数据唯一性的字段称为主键一对一有AB两张表,A表中的一条数据对应B表中的一条数据同时B表一条对应A表一条,这种关系称为一对一应用场景:商品表和商品详情表, 如何建立关系: 在从表中添加外键,外键的值指向主表的主键练习:请设计表保存以下数据用户名:wukong 密码:123456 昵称:齐天大圣 电话:13733666633 地址:花
初识SQLDCL (Data Control Language) 访问控制DDL (Data Definition language) 数据库定义语言DML(Data Manipulation langauge) 数据操作语句实战建表什么是主键? 数据库主键,指的是一个列或多列的组合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性。主键主要是用于其他表的外键关联,以及本记录的修
mysql 命令表字段约束 主键 primary key 非空not null 唯一 unique 默认 default 外键 foreign key 自增长auto_increment表字段类型不同于编程语言 数字:int,decimal,float 字符串:varchar(20),char(20),text 日期:datetime date time连接命令 打开终端,运行命令:mysql -
在一些复杂的应用开发中,一个应用可能会涉及到连接多个数据源,所谓多数据源这里就定义为至少连接两个及以上的数据库了。 下面列举两种常用的场景: 一种是读写分离的数据源,例如一个读库和一个写库,读库负责各种查询操作,写库负责各种添加、修改、删除。 &nbs
一、sql语句 1、主码: 唯一标识元组 ; 一个表只能有一个主键,主键从候选码中选一个 超码 : 可以唯一标识元组的属性组合 候选码: 超码中最小闭包,即不能在小化的超码 外码: r2主码:m ,r1主码n,含有属性m, 
MySQL数据库学习笔记----MySQL多表查询之外键、表连接、子查询、索引本章主要内容:**一、外键 ****二、表连接 ****三、子查询 **四、索引一、外键:1、什么是外键2、外键语法3、外键的条件4、添加外键5、删除外键1、什么是外键:主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的
外码 外 键(Foreign Key)是指表中的一列或一组列,其值必须至少匹配其父表中一行的一个主键或惟一键值。这真正意味着什么呢?它实际上并非如听起来那般复杂。简单来说,它 意味着如果表(T2)中的一列(C2)存在值匹配另一个表(T1)中的一列(C1)的值, 并且 C1 是 T1 的主键,那么 C2 就是 T2 中的外键列。将包含了父键(主键或惟一键)的表称为 父表(par
主键:唯一且非空,即 某条记录的唯一识别码外键:就是在别的表出现过的主键,即 其他表的主键 可以是其他表中的一条记录或者可以为空Day1:建表create database stuinfo --创建一个stuinfo的数据库use stuinfocreate table major( mno int, mname varchar(20), primary key(mno))sel
在MySQL中(1)MySQL 数据表主要支持六种类型 ,分别是:BDB、HEAP、ISAM、MERGE、MYISAM、InnoBDB。这六种又分为两类,一类是”事务安全型”(transaction-safe),包括BDB和InnoDB;其余都属于第二类,称为”非事务安全型”(non-transaction-safe)。InnoDB 是较新的事务安全型存储引擎,用于事务处理应用程序,支持
前段时间运营部找我说是他们推广的链接没几天就被微信给封了,变成了停止访问该页面。就是这样的了! 还有些做广告推广的链接封的就更快了,可能十几分钟不到就变成这样了,更头大的是啥时候变成这样的都不知道,推广费看着是哗啦啦的流,但是效果却不见。你说心痛不?好了,调侃了这么多,给大家看一下我的这个效果吧!这是我利用我写的接口做了一个测试的页面,我像你很容易就能看懂 我在网上搜了好久都没有人提及这个的实现原
如何下载永定门外街道卫星地图高清版大图永定门外街道行政区域简介 永定门外街道位于北京市东城区西南部,东起蒲黄榆,南至木樨园及南三环路一线,西起北京南站,北至永定门城楼、跨南二环滨河路,辖区面积3.33平方公里,有主要大街11条、胡同街巷208条、过境公交线30余条。设社区居委会20个,中、小学、幼儿园11