当前课程知识点:数据库概论 >  第四章 数据库完整性、视图与安全性 >  4.4 触发器 >  触发器

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

触发器在线视频

触发器

下一节:视图

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

触发器课程教案、知识点、字幕

同学们好

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

同学们好

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

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

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

下面为大家介绍触发器

下面为大家介绍触发器

一种是非过程性约束

前面我们学习了非过程性约束

前面我们学习了非过程性约束

又称为声明式约束

通过在创建表时

通过在创建表时

定义声明式约束来实现数据库逻辑设计

定义声明式约束来实现数据库逻辑设计

定义声明式约束来实现数据库逻辑设计

识别出来的多数数据完整性规则

识别出来的多数数据完整性规则

识别出来的多数数据完整性规则

识别出来的多数数据完整性规则

这些约束在执行SQL语句的更新过程中

这些约束在执行SQL语句的更新过程中

这些约束在执行SQL语句的更新过程中

始终是有效的

始终是有效的

始终是有效的

始终是有效的

能够防止错误的更新操作破坏数据的完整性

能够防止错误的更新操作破坏数据的完整性

能够防止错误的更新操作破坏数据的完整性

能够防止错误的更新操作破坏数据的完整性

能够防止错误的更新操作破坏数据的完整性

另外一种是过程性约束

除了非过程性约束

除了非过程性约束

除了非过程性约束

数据库管理系统还提供一种

数据库管理系统还提供一种

称为触发器的过程性约束方法

称为触发器的过程性约束方法

称为触发器的过程性约束方法

触发器能够通过编程来生成动态规则

触发器能够通过编程来生成动态规则

触发器能够通过编程来生成动态规则

能够实现比非过程性约束更复杂的功能

能够实现比非过程性约束更复杂的功能

能够实现比非过程性约束更复杂的功能

能够实现比非过程性约束更复杂的功能

触发器定义在表或者视图上

触发器定义在表或者视图上

触发器定义在表或者视图上

通过将表的插入

通过将表的插入

通过将表的插入

删除或者更新操作发生前

删除或者更新操作发生前

或者发生后定义为相应事件

或者发生后定义为相应事件

或者发生后定义为相应事件

并为这些事件定义相应的动作

在创建表的同时定义约束

当事件发生时

当事件发生时

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

数据库管理系统触发和事件相对应的动作

数据库管理系统触发和事件相对应的动作

数据库管理系统触发和事件相对应的动作

来保证数据完整性和实现其他功能

来保证数据完整性和实现其他功能

来保证数据完整性和实现其他功能

来保证数据完整性和实现其他功能

来保证数据完整性和实现其他功能

来保证数据完整性和实现其他功能

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

每种数据库管理系统

每种数据库管理系统

提供的触发器定义语句有细微的差别

提供的触发器定义语句有细微的差别

提供的触发器定义语句有细微的差别

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

但基本机制时一致的

但基本机制时一致的

都涉及到表

更新操作类型

操作发生的时间和相应的代码段

操作发生的时间和相应的代码段

操作发生的时间和相应的代码段

操作发生的时间和相应的代码段

操作发生的时间和相应的代码段

下面我们以ORACLE数据库

的触发器语句做讲解

的触发器语句做讲解

的触发器语句做讲解

我们还可以定义涉及到

表中多个字段的约束

创建一个触发器

需要用CREATE TRIGGER语句

需要用CREATE TRIGGER语句

需要用CREATE TRIGGER语句

表示生成一个触发器对象

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

后面需要指定一个触发器名称

后面需要指定一个触发器名称

后面需要指定一个触发器名称

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

接下来我们定义一个事件

接下来我们定义一个事件

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

事件的定义由操作和操作发生的时间构成

事件的定义由操作和操作发生的时间构成

事件的定义由操作和操作发生的时间构成

事件的定义由操作和操作发生的时间构成

操作是指INSERT、DELETE

操作是指INSERT、DELETE

操作是指INSERT、DELETE

或UPDATE中的一种或几种

或UPDATE中的一种或几种

或UPDATE中的一种或几种

时间有两个选择

时间有两个选择

before表示操作发生前

after表示操作发生后

after表示操作发生后

after表示操作发生后

对时间和操作进行组合

对时间和操作进行组合

需要在列上面定义外

我们可得到相应事件

我们可得到相应事件

我们可得到相应事件

比如我们可定义after insert

表示插入操作执行后事件触发

表示插入操作执行后事件触发

表示插入操作执行后事件触发

表示插入操作执行后事件触发

通过关键字when可定义一个搜索条件

通过关键字when可定义一个搜索条件

通过关键字when可定义一个搜索条件

通过关键字when可定义一个搜索条件

涉及到多个字段的约束

触发器触发后

涉及到多个字段的约束

将判断搜索条件是否满足条件

将判断搜索条件是否满足条件

才采用表级约束定义

只有满足搜索条件

只有满足搜索条件

才会执行相应的代码

才会执行相应的代码

才会执行相应的代码

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

满足条件触发的动作

满足条件触发的动作

一般由一条或者多条SQL语句组成

一般由一条或者多条SQL语句组成

由BEGIN ATOMIC关键字开始

由BEGIN ATOMIC关键字开始

END关键字结束

触发器定义语法还提供了动作执行的频度

触发器定义语法还提供了动作执行的频度

触发器定义语法还提供了动作执行的频度

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

有FOR EACH ROW和

有FOR EACH ROW和

有FOR EACH ROW和

有FOR EACH ROW和

FOR EACH STATEMENT

两个选项

FOR EACH ROW选项对受影响

FOR EACH ROW选项对受影响

的每一数据行都执行一次动作

的每一数据行都执行一次动作

FOR EACH STATEMENT选项

FOR EACH STATEMENT选项

只在操作结束时执行一次动作

只在操作结束时执行一次动作

不管受影响的数据有多少行

不管受影响的数据有多少行

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

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

动作程序中的语句可能需要使用

一行数据在更新前或更新后的值

一行数据在更新前或更新后的值

一行数据在更新前或更新后的值

一行数据在更新前或更新后的值

加上关键字CONSTRAINT

为达到这个目的

我们可以用REFERENCING子句为

我们可以用REFERENCING子句为

被更新的一行或多行

被更新的一行或多行

被更新的一行或多行

甚至整个表定义相关名

甚至整个表定义相关名

通过这些相关名

通过这些相关名

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

可访问更新前或者更新后的

行数据甚至更新前后整张表内容

行数据甚至更新前后整张表内容

行数据甚至更新前后整张表内容

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

下面我们分析一个触发器例子

下面我们分析一个触发器例子

下面我们分析一个触发器例子

也意味着组成主键的列

以加深对触发器的理解

以加深对触发器的理解

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

在顾客信息表customers中插入行时

在顾客信息表customers中插入行时

我们需要实现这样一个约束

我们需要实现这样一个约束

折扣列discnt的值必须小于15

折扣列discnt的值必须小于15

否则插入失败

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

前面我们已经用check约束实现了

前面我们已经用check约束实现了

前面我们已经用check约束实现了

保证了实体完整性

现在我们用触发器来实现这样一个约束

现在我们用触发器来实现这样一个约束

现在我们用触发器来实现这样一个约束

FOREIGN KEY

创建这个触发器的语句是:

创建这个触发器的语句是:

创建这个触发器的语句是:

创建这个触发器的语句是:

用来保证参照完整性

create trigger discnt_max

create trigger discnt_max

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

after insert on customers

referencing new as x

referencing new as x

referencing new as x

for each row

when ( x.discnt > 15.0 )

when ( x.discnt > 15.0 )

begin

生成一个错误信息

生成一个错误信息

end

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

我们将在后面详细介绍

我们在表customers上创建了

名为discnt_max的触发器

名为discnt_max的触发器

名为discnt_max的触发器

名为discnt_max的触发器

在对表customers执行

insert语句后触发

insert语句后触发

子句referencing new as x

子句referencing new as x

表示给新插入的行数据设定一个相关名x

表示给新插入的行数据设定一个相关名x

表示给新插入的行数据设定一个相关名x

表示给新插入的行数据设定一个相关名x

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

在后面的搜索条件中用到变量x

在后面的搜索条件中用到变量x

来表示新插入的行数据

来表示新插入的行数据

来表示新插入的行数据

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

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

我们用了for each row选项

表示对表customers插入一行后

表示对表customers插入一行后

表示对表customers插入一行后

表示对表customers插入一行后

也称为检查约束

这个触发器就会测试

这个触发器就会测试

WHEN子句中的搜索条件

WHEN子句中的搜索条件

discnt>15.0

discnt>15.0

如果该行的discnt字段值

如果该行的discnt字段值

如果该行的discnt字段值

大于15

大于15

将生成一条错误信息

表达式只能引用该列值

执行该插入命令的应用程序中

执行该插入命令的应用程序中

执行该插入命令的应用程序中

将会出现SQLERROR信息

新插入的行被删除

新插入的行被删除

现在我们已经学习了

现在我们已经学习了

Create table语句

Create table语句

提供的非过程性约束以及

提供的非过程性约束以及

create trigger语句提供的

过程性约束

过程性约束

两种约束各有优缺点

两种约束各有优缺点

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

一般建议尽量使用非过程性约束

一般建议尽量使用非过程性约束

触发器作为非过程性约束的补充

触发器作为非过程性约束的补充

好了同学们

好了同学们

好了同学们

我们这节课就到这里

我们这节课就到这里

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

再见

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

如果更新或者插入行

导致该列上的值为空

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

除了上述约束

在对字段进行定义的时候

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

这由关键字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

触发器笔记与讨论

也许你还感兴趣的课程:

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