当前课程知识点:数据库系统原理与开发 >  第6章 数据库应用编程 >  6.3 数据库触发器 >  6.3 数据库触发器

返回《数据库系统原理与开发》慕课在线视频课程列表

6.3 数据库触发器在线视频

下一节:6.4 数据库游标

返回《数据库系统原理与开发》慕课在线视频列表

6.3 数据库触发器课程教案、知识点、字幕

同学们大家好

我是主讲教师陈安龙

下面我们开始学习数据库编程的第4小节

这一节我们将要学习的主要内容

1)了解触发器的基本概念

2)掌握postgreSQL触发器创建、修改、删除的方法

3)理解触发器的执行过程

一 触发器的基本概念

触发器是特殊类型的存储过程

主要由操作事件(INSERT、UPDATE、DELETE)

触发而被自动执行

触发器可以实现比约束更复杂的数据完整性

经常用于加强数据的完整性约束和业务规则

触发器本身是一个特殊的事务单位

当触发器中的语句执行过程

由于出现异常而终止时

数据库管理系统会回滚触发器对数据库的改变

触发器的特点

与表相关联 必须定义在表或视图上

自动触发:由执行INSERT DELETE UPDATE操作时触发

不能直接调用 也不能传递或接受参数

是事务的一部分:触发器和触发语句作为

可在触发器内回滚的单个事务

触发器的分类

按触发的语句分为 INSERT触发器 DELETE触发器 UPDATE触发器

在数据库表上执行delete语句将会触发delete触发器

在数据库表上执行update语句将会触发update触发器

触发器的分类

触发器执行的次数可分

(1)语句级触发器:由关键字FOR EACH STATEMENT声明

在触发器作用的表上执行一条SQL语句时

该触发器只执行一次

即使是修改了零行数据的SQL

也会导致相应的触发器执行

如果都没有被指定

FOR EACH STATEMENT会是默认值

(2)行级触发器:由关键字FOR EACH ROW标记的触发器

当触发器作用的表的数据发生变化时

每变化一行就会执行一次触发器

例如 假设学生成绩表有DELETE触发器

当在该表执行DELETE语句删除记录时

如果删除了20条记录

则将导致 DELETE触发器被执行20 次

按触发的时间分为三类:

(1)BEFORE触发器:在触发事件之前执行触发器

(2)AFTER触发器:在触发事件之后执行触发器

(3)INSTEAD OF触发器:当触发事件发生后

执行触发器中指定的函数

而不是执行产生触发事件的SQL 语句

从而替代产生触发事件的SQL操作

在表或视图上

对于INSERT、UPDATE 或 DELETE 三种触发事件

每种最多可以定义一个INSTEAD OF 触发器

INSTEAD OF 触发器

由于视图是来自于基表数据的虚表

大多数视图不支持对视图的insert delete update操纵

应用程序在视图上执行insert delete update时

可以使用INSTEAD OF 触发器会代替执行

对基表的insert delete update操纵

触发器相关的特殊变量

(1)NEW 数据类型是RECORD

对于行级触发器

它存有INSERT或UPDATE操作产生的新的数据行

对于语句级触发器 它的值是NULL

(2)OLD 数据类型是RECORD

对于行级触发器

它存有被UPDATE或DELETE操作修改或删除的旧的数据行

对于语句级触发器 它的值是NULL

(3)TG_OP数据类型是text

值为INSERT、UPDATE、DELETE 的一个字符串

它说明触发器是为哪个操作引发

有的数据库系统把new和old看作一张只读的表

可以使用select查询语句进行查询 如ORACLE

二、PostgreSQL创建触发器的基本语法

CREATE TRIGGER 加触发器名

后面跟上相应的触发器参数

(1)指明所定义的触发器名

(2)BEFORE | AFTER | INSTEAD OF

指明触发器被触发的时间

(3)ON 表名 指明触发器所依附的表

(4)FOR EACH

指明触发器被触发的次数

(5)EXECUTE PROCEDURE 存储过程名 ( 参数列表 )

指明触发时所执行的存储过程

三、PostgreSQL创建触发器的基本步骤

(1)检查数据库中将要创建的触发器所依附的表

或视图是否存在

如果不存在 必须首先创建该表或视图

(2)创建触发器被触发时所要执行的触发器函数

该函数的类型必须是TRINGER型

是触发器的执行函数 但要注意

有些数据库不需要独立定义触发器函数

而是在创建触发器时

定义触发器的过程体

(3)创建触发器 一般需要指明触发器依附的表

触发器被触发执行的时间

触发器是行级触发器还是语句级触发器

触发器执行需要满足的条件

注意:postgreSQL创建触发器的方式不同于其它数据库

如ORACLE

下面我们来介绍创建触发器的示例

假设有stu_score表存储学生的课程成绩

其表结构如下

有sid、cid、score

同时插入对应的数据在成绩表中

为了防止非法修改stu_score表的课程成绩

可创建audit_score表记录成绩表的成绩变化

其表结构如下:

主要包括用户名 修改时间 修改前的成绩 修改之后的成绩

现在创建触发器函数

如果是执行的delete语句

则将删除的记录从old中读出写入审计表

如果是执行的update语句

则将修改前的记录从old中读出 修改后的记录从new读出写入审计表

如果是执行的insert语句

则将插入的记录从new中读出写入审计表;

接下来在stu_score表上创建触发器

主要定义该触发器同时支持INSERT OR UPDATE OR DELETE

并且是行触发器

五 验证触发器的执行

将课程号为1201的课程成绩增加1分

update stu_score set score=score+1 where cid='1201'

修改之后的成绩表的数据

audit_score是存储的修改前的学生和修改后的学生成绩

下面将删除课程号为1501的课程成绩

使用 delete from 语句

stu_score删除之后的成绩

audit_score是在触发器触发之后的数据

录入学号14503的同学的1201号课程成绩

INSERT INTO 语句

录入成绩之后的stu_score

当触发器触发之后

审计表audit_score的记录

五、触发器的修改

ALTER TRIGGER name ON table_name RENAME TO new_name

主要参数说明

name:需要修改的现有触发器的名称

table_name:该触发器作用的表的名字

new_name:是触发器的新名字

例如:将上述定义的触发器改名为score_audit_trig

六 触发器的删除

当我们不需要触发器的时候

使用DROP TRIGGER 删除触发器

主要参数说明:

(1)IF EXISTS:如果指定的触发器不存在 那么发出提示

(2)name:要删除的触发器名

(3)table_name:触发器定义所依附的表的名称

(5)CASCADE:级联删除依赖此触发器的对象

(6)RESTRICT:如果有依赖对象存在

那么拒绝删除

该参数缺省是拒绝删除

例如:将上述触发器score_audit_trig删除

同时级联删除依赖触发器的对象

数据库系统原理与开发课程列表:

第1章 数据库系统概论

-1.1 数据库及其系统概念

--1.1 数据库及其系统概念

-1.2 数据库技术发展

--1.2 数据库技术发展

-1.3 数据库应用系统

--1.3 数据库应用系统

-1.4 典型数据库管理系统

--1.4 典型数据库管理系统

-1.5 PostgreSQL对象-关系数据库系统软件

--1.5 PostgreSQL对象-关系数据库系统软件

-第1章 数据库系统概论--本章单元测试

-第1章 数据库系统概论--本章重点问题讨论

第2章 数据库关系模型

-2.1 关系及其相关概念

--2.1.1关系及其相关概念-1

--2.1.2关系及其相关概念-2

-2.2 关系模型原理

--2.2.1关系模型原理-1

--2.2.2关系模型原理-2

-2.3 PostgreSQL数据库关系操作实践

--2.3 PostgreSQL数据库关系操作实践

-第2章 数据库关系模型--本章单元测试

-第2章 数据库关系模型--本章重点问题讨论

第3章 数据库操作SQL语言

-3.1 SQL语言概述

--3.1 SQL语言概述

-3.2 数据定义SQL语句

--3.2.1数据定义SQL语句-1

--3.2.2数据定义SQL语句-2

--3.2.3数据定义SQL语句-3

-3.3 数据操纵SQL语句

--3.3 数据操纵SQL语句

-3.4 数据查询SQL语句

--3.4.1单表数据查询

--3.4.2 内置函数与分组统计

--3.4.3 多表关联查询

-3.5 数据控制SQL语句

--3.5 数据控制SQL语句

-3.6 视图SQL语句

--3.6 视图SQL语句

-3.7 PostgreSQL数据库SQL实践

--3.7 PostgreSQL数据库SQL实践

-第3章 数据库操作SQL语言--本章单元测试

-第3章 数据库操作SQL语言--本章重点问题讨论

第4章 数据库设计与实现

-4.1 数据库设计概述

--4.1 数据库设计概述

-4.2 E-R模型方法

--4.2.1 E-R模型方法-1

--4.2.2 E-R模型方法-2

-4.3 数据库建模设计

--4.3.1 数据库建模设计-1

--4.3.2 数据库建模设计-2

-4.4 数据库规范化设计

--4.4.1 数据库规范化设计-1

--4.4.2 数据库规范化设计-2

-4.5 数据库设计模型SQL实现

--4.5 数据库设计模型SQL实现

-4.6 基于Power Designer的数据库设计建模实践

--4.6 基于Power Designer的数据库设计建模实践

-第4章 数据库设计与实现--本章单元测试

-第4章 数据库设计与实现--本章重点问题讨论

第5章 数据库管理

-5.1 数据库管理概述

--5.1 数据库管理概述

-5.2 事务管理

--5.2 事务管理

-5.3 并发控制

--5.3.1 并发控制-1

--5.3.2 并发控制-2

-5.4 安全管理

--5.4.1 安全管理-1

--5.4.2 安全管理-2

-5.5 数据库备份与恢复

--5.5 数据库备份与恢复

-5.6 PostgreSQL数据库管理项目实践

--5.6 PostgreSQL数据库管理项目实践

-第5章 数据库管理--本章单元测试

-第5章 数据库管理--本章重点问题讨论

第6章 数据库应用编程

-6.1 数据库连接技术

--6.1.1 数据库连接技术-1

--6.1.2 数据库连接技术-2

-6.2 数据库存储过程

--6.2 数据库存储过程

-6.3 数据库触发器

--6.3 数据库触发器

-6.4 数据库游标

--6.4 数据库游标

-6.5 嵌入式SQL编程

--6.5 嵌入式SQL编程

-第6章 数据库应用编程--本章单元测试

-第6章 数据库应用编程--重点问题讨论

第7章 NoSQL数据库技术

-7.1 NoSQL数据库概述

--7.1.1 NoSQL数据库概述-1

--7.1.2 NoSQL数据库概述-2

--7.1.3 NoSQL数据库概述-3

-7.2 列存储数据库

--7.2.1列存储数据库-1

--7.2.2列存储数据库-2

-7.3 键值对数据库

--7.3.1 键值对数据库-1

--7.3.2 键值对数据库-2

--7.3.3 键值对数据库-3

-7.4 文档型数据库

--7.4.1文档型数据库-1

--7.4.2文档型数据库-2

--7.4.3文档型数据库-3

-7.5 图形数据库

--7.5.1图形数据库-1

--7.5.2图形数据库-2

--7.5.3 图形数据库-3

-7.6 HBase数据库项目实践

--7.6 HBase数据库项目实践

-第7章 NoSQL数据库技术--本章单元测试

-第7章 NoSQL数据库技术--本章重点问题讨论

期末考试

-期末测试--期末测试

6.3 数据库触发器笔记与讨论

也许你还感兴趣的课程:

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