当前课程知识点:数据库概论 >  第四章 数据库完整性、视图与安全性 >  4.3 外键约束 >  外键约束

返回《数据库概论》慕课在线视频课程列表

外键约束在线视频

外键约束

下一节:触发器

返回《数据库概论》慕课在线视频列表

外键约束课程教案、知识点、字幕

同学们好

我是来自云南大学软件学院的包崇明

下面为大家介绍外键约束

前面我们学习了部分列级约束和表级约束

现在来看一下外键约束

相对于其他约束

外键约束定义更加复杂

更具灵活性

外键约束

保证了参照完整性

参照完整性维护表与表之间的相关性

一般涉及到两张表

我们命名为T1表和T2表

T1表和T2表的相关性是指

T2表中某些字段的组合值

只能取T1表中主键或者候选键的组合值

或者T2表中这些字段至少一个取空值

这类约束称为参照完整性

一般用外键约束来保证参照完整性

实现上

我们需要在T2表上

定义这些字段的外键约束

让其参照T1中主键或者候选键

实现参照完整性可有多种选择

所以外键约束提供多种选项

定义外键约束后

T1表和T2表上的更新操作

都会受到影响

下面我们通过两张相关的表

来进一步理解参照完整性及外键约束

一张表为雇员表

包括eid

ename

address和dno四个字段

其中eid为雇员标识

定义为主键

dno字段表示雇员所在部门

另外一张表为部门表

包括dno和dname两个字段

其中dno表示部门编号

为部门标识

定义为主键

dname为部门名称

我们的设计意图要求雇员表中

dno字段的取值要么为空

表示这个雇员的部门尚未确定

要么必须取部门表中已经存在的一个部门

就这是参照完整性

我们通过在雇员表中

设置一个外键约束来实现参照完整性

我们在创建雇员表时

在字段dno上面定义了一个列级约束

关键字REFERENCES

将字段dno定义为外键

后面需要给出所参照的表和参照的字段

本例中我们给出所参照的表是部门表

但没有指定参照的字段

这种情形表示

外键dno参照的是部门表的主键

通过上述外键定义

数据库管理系统

能够保证将雇员表中

dno字段的取值限定为取空值

或者取部门表中已存在的一个部门的标识

保证了我们的设计意图

外键约束涉及到两张表

如果对部门表进行增删改操作

会不会影响到雇员表的参照完整性呢

我们通过一个表来看一下

对部门表和雇员表进行

插入删除和更新操作时

为了保证参照完整性

数据库管理系统需要做的一些测试

以及提供的可选操作

表中第一行是部门表

它的主键dno

被雇员表的外键dno参照

第二行是雇员表

定义了外键dno参照部门表的主键

对雇员表来说

对其进行增删改操作

参照完整性由外键约束dno保证

当插入一个新雇员时

雇员的部门值需要为空

或者在部门表中存在

当删除一个雇员时

不会影响到参照完整性

数据库管理系统不会进行检测

当更新雇员信息时

数据库管理系统需要测试

更新是否涉及到部门

如果更新后的部门不为空

并且没有在部门信息表中存在

则不允许更新操作

对部门表来说

当插入一个新部门时

由于不会影响已有雇员的部门信息

所以不需要进行检测

当删除一个部门时

由于这个被删除的部门可能

被雇员表中某些雇员参照

也就是说

雇员表中某些行上面字段dno的值

是即将被删除的部门

如果直接删除部门

将导致这些雇员的dno字段的值

在部门表中不存在

从而违反了参照完整性

为了保证参照完整性

在删除部门时

数据库管理系统需要进行检测

并提供数据库管理员

根据情况设定相应的操作

数据库管理系统一般提供三种常见操作

第一种选择

如果删除的部门被某些雇员参照

也就是这个部门中还有雇员

那么这个部门行不允许被删除

这是默认的操作

我们前面定义的外键dno就是这类操作

第二种选择是

如果删除的部门被某些雇员参照

那么将这些雇员的dno字段设置为空值

实现这种操作需要在外键定义后面加上

加上子句

ON DELETE SET NULL

第三种选择是

如果删除的部门被某些雇员参照

那么在部门表中删除该部门后

将从雇员表中删除该部门的所有员工

这种选择我们称为级联删除

实现这种操作需要在外键定义后面

加上子句

ON DELETE CASCADE

当对部门表进行更新时

也可能破坏参照完整性

因为可能更新一个部门的标识

而这部门标识正被一些雇员参照

所以也要做检测

数据库管理系统也提供了一些操作

以供选择

这些操作和前面讲述的删除一个部门时的

可选操作类似

默认是不允许进行更新操作

在这就不详细讲述

请同学们参看课本

通过Create table语句

创建约束后

可通过Alter Table语句

进行修改或者删除命名的约束

也可以在表上增加新的约束

我们用一个例子来说明

在这个例子中

我们用Alter Table语句

给表sale新增两个约束

一个是命名的主键约束

将字段sid设置为主键

另外一个是命名的check约束

限制字段dollars的取值

只能小于1000

好了

同学们

我们下节课见

数据库概论课程列表:

导论

-数据库概述

--Video

-导论--数据库概述

第一章 数据库基础

-1.1 数据库基础

--Video

-第一章 数据库基础--1.1 数据库基础

第二章 关系运算

-2.1 CAP数据库

--CAP数据库

-第二章 关系运算--2.1 CAP数据库

-2.2 自然关系运算1

-- 自然关系运算1

-第二章 关系运算--2.2 自然关系运算1

-2.3 自然关系运算2

--自然关系运算2

-第二章 关系运算--2.3 自然关系运算2

第三章 结构化查询语言SQL

-3.1 SQL概述

-- SQL概述

-3.1 SQL概述--作业

-3.2 数据定义DDL

--数据定义DDL

-3.2 数据定义DDL--作业

-3.3 SQL数据更新DML

--SQL数据更新DML

-3.3 SQL数据更新DML--作业

-3.4 复杂SQL查询操作1

--复杂SQL查询操作1

-第三章 结构化查询语言SQL--3.4 复杂SQL查询操作1

-3.5 复杂SQL查询操作2

--复杂SQL查询操作2

-第三章 结构化查询语言SQL--3.5 复杂SQL查询操作2

第四章 数据库完整性、视图与安全性

-4.1 数据完整性

--4.1 数据完整性

-4.1 数据完整性--作业

-4.2 完整性约束

--完整性约束

-4.2 完整性约束--作业

-4.3 外键约束

--外键约束

-4.3 外键约束--作业

-4.4 触发器

--触发器

-4.4 触发器--作业

-4.5 视图

--视图

-4.5 视图--作业

-4.6 安全性

--安全性

-4.6 安全性--作业

第五章 索引

-5.1 索引

--Video

-5.2 B+树索引

--Video

第六章 规范化理论

-6.1 函数依赖

--Video

-6.2 Armstrong公理

--Video

-6.3 无损分解

--Video

-6.4 范式举例

--Video

-6.5 三种范式

--Video

-6.5 三种范式--作业

第七章 实体关系模型

-7.1-E-R模型概述

--E-R模型概述

-7.2 E-R模型详解

--Video

-7.3 E-R模型的拓展

--Video

-7.4 E-R模型实例分析

--Video

第八章 事务处理

-8.1 事务的ACID性质介绍

--ACID介绍

-8.1 事务的ACID性质介绍--作业

-8.2 事务经历

--事务经历

-8.2 事务经历--作业

-8.3 可串行化调度和前趋图

--可串行化调度和前趋图

-8.3 可串行化调度和前趋图--作业

-8.4 两阶段封锁

--两段锁协议

-8.4 两阶段封锁--作业

-8.5 隔离级别

--隔离级别

-8.5 隔离级别--作业

-8.6 事务恢复

--事务恢复

-8.6 事务恢复--作业

第九章 数据库应用与开发

-9.1 数据库使用介绍

--数据库使用介绍

-9.2 Java访问数据库

--Java访问数据库

-9.2 Java访问数据库--作业

第十章 其他数据库技术概述

-10.1 数据库新技术概述

--Video

外键约束笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。