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

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

完整性约束在线视频

完整性约束

下一节:外键约束

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

完整性约束课程教案、知识点、字幕

同学们好

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

下面为大家介绍完整性约束

一种是非过程性约束

又称为声明式约束

这类约束通过在

创建表的Create table语句中

提供约束定义子句实现

也可以通过修改表的

Alter table语句中相应子句实现

这种方式相对简单

虽然提供的约束形式有限

但能覆盖大多数设计阶段识别出来的约束

编程简单且效率高

另外一种是过程性约束

需要编程实现

我们称之为触发器

这种方式比较灵活

可以实现更复杂的约束

两种方式各有优点

一般来说

能够在逻辑设计阶段识别出来的约束

尽量采用非过程化约束实现

对于后期需要添加的约束或者复杂约束

才采用触发器实现。

我们先学习非过程性约束

也就是用Create table语句

在创建表的同时定义约束

在不同的商用数据库系统中

Create table语句

包含有不同的复杂子句

但对于约束定义

基本语法上是一致的

一个基本的CREATE TABLE语句的语法

应包含对字段的定义和对约束的定义

如图所示

我们在定义一个字段的时候

可以定义施加于这个字段上面的约束

这类施加于一个字段上面的约束

我们称为列级约束

字段定义结束后

我们还可以定义涉及到

表中多个字段的约束

这种约束我们称为表级约束

列级约束和表级约束是数据库管理系统

提供的两种非过程性约束定义方式

相对列级约束

表级约束更加强大

它可以定义涉及到多个字段的约束

所以我们把列级约束

看着是表级约束的一个特例

除了为一个字段

设定缺省值和定义它的取值不能为空

需要在列上面定义外

其他的列级约束

都可以用表级约束来定义

为了定义的简洁性

一般我们尽量将

只涉及到一个字段的约束定义为列级约束

涉及到多个字段的约束

才采用表级约束定义

定义列级约束时

需要在列名和类型后面加上一个空格

然后定义多个施加于该列上面的约束

最后用一个逗号来结束该列的定义

显然列级约束定义是可选的

一般来说

我们在所有列定义结束后才定义表级约束

这只是一个约定

你也可以在列定义中间穿插定义表级约束

表级约束定义的时候

需要和列定义间用逗号分隔

一张表可定义多个表级约束

每个表级约束间用逗号分隔

我们来看一个表级约束的简化定义

每一个约束我们可定义一个可选的约束名

如果要定义约束名

需要在约束名前

加上关键字CONSTRAINT

定义约束名的好处是

以后如果不需要这个约束了

我们可以用Alter Table语句

来删除这个约束

下面我们看一下几种常见的约束

PRIMARY KEY是主键约束

定义表中一列或者多列组成该表的主键

也意味着组成主键的列

隐含定义了非空和唯一两个约束

主键约束意味着当我们插入一行

如果这一行的主键字段值为空

或者主键字段值在表中其他行中已经存在

插入操作将失败

保证了实体完整性

FOREIGN KEY

即外键约束

用来保证参照完整性

保证我们对一行中外键的取值要么为空

要么是参照表上主键或者候选键的取值

外键定义涉及到参照表

也有多个保证参照完整性的选项

我们将在后面详细介绍

UNIQUE约束

即唯一性约束

可以在表中多列上定义唯一性约束

该约束允许这些列上可取空值

如果一行中这些列上都没有空值

那么该行中

这些列取值的组合在表中必须是唯一的

如果更新或者插入行

导致这些列上组合值不是唯一的

那么更新或者插入操作将失败

CHECK约束

也称为检查约束

定义一个检查约束

需要在关键字check后面的括号里

给出查询表达式

如果是列级check约束

表达式只能引用该列值

如果是表级check约束

查询表达式允许引用表中多列的值

查询表达式求值的结果

是true或者false

更新或者插入行时

将对该行进行查询表达式求值

如果结果为false

那么更新或者插入操作将失败

列级约束中需要注意的是Not Null

即非空约束

在表级约束上没有定义

它要求表中每一行数据在该列上不能取空值

如果更新或者插入行

导致该列上的值为空

那么更新或者插入操作也将失败

除了上述约束

在对字段进行定义的时候

我们可以为该字段指定一个缺省值

这由关键字Default后面

给出该字段的缺省值

当插入一行数据时

如果没有指定该列的值

那么系统将用缺省值填充

如果没有指定缺省值

那么该列的值默认取空值

我们在定义约束的时候

注意定义的约束之间不能相互冲突

比如在一个字段上面定义非空约束后

不能再定义该列的缺省值为空

另外

主键约束在每张表中只能定义一个

下面我们通过一个创建表的例子

来进一步学习如何定义约束

我们用create table语句

创建表customers

并定义了三个列级约束和一个表级约束

在cid字段上

我们定义了一个列级约束not null

约束cid的取值不能为空

在city字段上

我们定义了一个缺省值约束

当插入新行时

如果没有指定city的值

系统将用‘New York’填充

在discnt字段上

我们定义了一个check约束

约束名为discnt_max

当插入或者更新操作时

将检查该行的discnt是否小于15

如果不满足

操作失败

最后我们定义了一个表级约束

在cid字段上定义了主键约束

好了同学们我们下节课再见

数据库概论课程列表:

导论

-数据库概述

--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

完整性约束笔记与讨论

也许你还感兴趣的课程:

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