当前课程知识点:数据库技术应用 >  学习情境四、银行存取款机数据库编程 >  模块2、银行存取款机触发器 >  4.2.1INSERT触发器

返回《数据库技术应用》慕课在线视频课程列表

4.2.1INSERT触发器在线视频

下一节:任务实施:银行存取款机INSERT触发器

返回《数据库技术应用》慕课在线视频列表

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

大家好

欢迎来到数据库技术应用开放课程

今天的任务是insert触发器

我们需要创建一个insert触发器

实现当进行银行自动存取款机存取款操作的时候

自动修改余额

为什么需要触发器

典型的应用其实就是银行的存取款机系统

比如说张三开户一千元

李四开户一元

那么张三支取二百元后

余额自动应该修改为八百元了

在这个过程当中

最优的解决方案就是用触发器

因为它是一种特殊的存储过程

他不需要调用是可以自动执行的

和我们前面讲的存储过程来比他是有一定的优越性的

那么第二个它具有事物的特征

也就是它是一系列操作的集合

要么都做要么都不做

不做的时候可以进行回滚

接下来他还能实现多表之间特殊的业务规则

比如说我们在这个例子当中

就涉及到了交易信息表

还涉及到了我们的帐户信息表

所以本节课的目标

是让大家理解触发器的优点

掌握insert的触发器的创建方法

我们一起进入知识技能的学习

首先我们来看一下触发器的基本概念

触发器是对表进行插入更新

删除操作时自动执行的存储过程

一会儿大家会看见关键字是trigger

trigger的是手枪扳机的意思

大家小的时候都玩过手枪

那么扳机就是一抠扳机子弹就会射出去

所以在我们的触发器当中

我可以用一个成语来解释触发器叫一触即发

所以在触发器的解决方案执行过程当中

我们在设计这个解决方案的时候需要知道

触发的原因是什么

触发的结果是什么

这是我们设计的一个重点

那触发器的特点刚刚咱们已经简单说过了

包括他可以实现多表之间特殊的业务规则

它是自动执行的存储过程

它还具备事物的功能

那触发器怎么创建

我们来看一下它的语法结构

create 关键字trigger

后面跟上触发器的名称

在接下来是触发的时间

然后是触发事件on表名

for each row触发器动作

这里面出发的时间就是我们熟悉的

after或是before

表示触发器是在激活他的语句之前还是之后进行触发

而这个触发事件

是指明了激活触发程序的语句的类型

可以有下面三种情况

可以是insert

大家都知道是插入

也就是将新行插入表时激活触发器

也可以是update更改某一操作的时候激活触发器

还可以是delete删除数据的时候激活触发器

那么触发器的动作包含触发器激活时将要执行的语句

如果要执行多个语句

可以使用begin end复合语句结构

把他圈住,作为一个语句块来出现

那么在这个触发器的设计和执行过程当中

有一个非常重要的概念叫临时表

在触发器里面mysql提供了两个临时表

一个是new一个是old

new是用来存放待插入的数据

old是用来存放待删除的数据

所以后面我们在用触发器的过程当中可以用new点列名 old点列名

进行一个列名的引用

那对于insert语句来说只有new是合法的

而对于delete语句来说只有old是合法的

那对于update语句什么是合法的

大家想一下所谓的update修改

实际上就是把旧的删掉了

把新的插进来了

所以对于update 语句来说new和old是需要同时使用的

那我们一起来实施任务

对于自动修改余额来说

我们需要知道触发的原因是什么触发的结果是什么

在这个问题当中

触发的原因就是你的存取款操作

我去刷卡然后点存款或者取款这么一个操作

也就是说产生了一个交易信息

那触发的结果是什么

就是我们的帐户信息表当中余额的一个修改

所以在这里面涉及到两张表

一张表叫cardinfo表另外一张表transinfo表

那我们来看一下代码怎么来做

先是delimter还是变更我们的结束符

然后用create trigger后面跟上我们的触发器名称

然后after insert就是在你交易信息表当中

插入数据之后触发我们的动作

所以是after insert

那触发原因是哪个表

transinfo 表

on transinfo就是当你的交易信息表当中

有一条数据插入的时候才会触发后面的一些相关操作

所以是transinfo表 for each row

begin end中间是我们的触发的结果

什么结果

是余额的修改

那余额的修改其实就是两种情况

要么是余额减少了要么是余额增加了

所以就是update select where 做了一个减法和加法的问题

但是我们需要进行判断

如果new . transType等于支取

那么update set where就做了一个减法

注意有条件where cardID等于new . cardID

所以大家看这里面我用到了临时表new

为什么要用new

是因为咱们说了提供这样一种机制

当然从业务的角度来说

我们在交易的时候并不能保证你这个交易一定是成功的

所以触发器有一个机制

就是他把你待插入的这条数据先放在临时表当中来存放

然后去验证这个业务

如果说满足业务的需求好了真正的实现插入

如果不满足业务的需求那我要进行回滚

就是刚刚咱们说的具备事物的特征

所以这些数据现在是在临时表里的

我取的时候就得从临时表当中来取

所以大家看到了我们都用的是

new . transmoney

new . cardID

那相反

else

那不是支取

就是存入呗

Update set where做了一个加法操作

这样的话endif我们的选择分支结构结束

然后存储过程结束,就可以实现我们刚才说到这个任务

当你有一条交易记录的时候

自动去修改表里的余额

那么大家现在想一下是不是刚才咱们说的三个特点

第一个自动执行不需要调用

第二个具备事物的特征如果中间出现一些意外

那么就要进行回滚 什么都不做

如果说执行成功好了我修改余额

第三个涉及到两个表的关联

包括我们的cardinfo和transinfo两张表的一个关联关系

所以最典型的或者说最好的一个解决方案

在这个问题当中

用到的就是触发器

是我们触发器当中的insert触发器

那么触发器做好了

我想看结果那需要测试测试的时候

他不需要调用了直接就可以测试了

那怎么测试当你有交易信息的时候

才会触发相应的动作

所以测试的时候我就向交易信息表

transinfo当中插入一条数据

大家看我插入的是支取二百元

那么我再select * from transinfo的时候

这条记录就已经插进去了

那select * from cardinfo的时候

就可以把现在这个卡号对应的余额减去二百元了

大家下去可以自己去测试一下

那么我们在配套资源当中还有一个互动的动画

来体验这个整个取款的过程理解触发器的概念

大家下去可以去用用

那么同时需要大家思考一下

为什么有的同学设计的触发器

他的钱会越取越多正常是越取越少的

但是他是越积越多的

看看哪儿有问题了大家下去想一想

那么今天的拓展任务

是员工管理数据库当中颜色的触发器的应用

感谢大家的聆听

数据库技术应用课程列表:

学习情境一、银行存取款机数据库创建与管理

-模块1、数据库的基础知识

--1.1.1数据库设计-数据库的基本概念

--1.1.2数据管理的发展和数据库体系结构

--数据库的基础知识

-模块2、MYSQL介绍与安装

--MYSQL介绍与安装

--MYSQL介绍与安装

-模块3、银行存取款机数据库的创建与维护

--1.3数据库的创建与维护

--银行存取款机数据库的创建与维护

-模块4、银行存取款机数据库的设计

--1.4.1数据库的概念模型设计

--1.4.2数据库的数据模型设计

--1.4.3数据库的关系规范化

--银行存取款机数据库的设计

学习情境二、创建和管理银行存取款机数据表

-模块1、表的创建

--2.1表的创建

--任务实施:银行存取款机表的创建

--表的创建

-模块2、表的管理

--2.2表的管理

--任务实施:银行存取款机表的管理

--表的管理

-模块3、索引

--2.3索引

--任务实施:银行存取款机索引

--索引

-实践小课堂:宠物电商管理平台数据库和表的创建

--实践小课堂:宠物电商管理平台数据库和表的创建

学习情境三、银行存取款机数据操纵

-模块1、银行存取款机数据插入、修改和删除

--3.1.1数据插入

--任务实施:银行存取款机数据插入

--3.1.2数据修改和删除

--任务实施:银行存取款机数据修改和删除

--实践小课堂:宠物电商管理平台数据插入

--银行存取款机数据插入、修改和删除

-模块2、银行存取款机简单查询

--3.2.1简单查询

--任务实施:银行存取款机简单查询

--实践小课堂:宠物电商管理平台简单查询

--3.2.2统计查询

--任务实施:银行存取款机统计查询

--实践小课堂:宠物电商管理平台条件查询

--银行存取款机简单查询和统计查询

-模块3、银行存取款机连接查询

--3.3连接查询

--任务实施:银行存取款机连接查询

--银行存取款机连接查询

-模块4、银行存取款机子查询

--3.4子查询

--任务实施:银行存取款机子查询

--实践小课堂:宠物电商管理平台多表查询

--银行存取款机子查询

-模块5、银行存取款机分类汇总与排序

--3.5分类汇总与排序

--任务实施:银行存取款机分类汇总与排序

--实践小课堂:宠物电商管理平台分类汇总和排序

--银行存取款机分类汇总与排序

-模块6、银行存取款机视图

--3.6.1视图的创建与管理

--任务实施:银行存取款机视图的创建与管理

--3.6.2视图的更新

--任务实施:银行存取款机视图的更新

--实践小课堂:宠物电商管理平台视图

--银行存取款机视图

学习情境四、银行存取款机数据库编程

-模块1、银行存取款机存储过程

--4.1.1创建和执行存储过程

--任务实施:银行存取款机创建和执行存储过程

--实践小课堂:宠物电商管理平台存储过程

--4.1.2事务

--任务实施:银行存取款机事务

--实践小课堂:宠物电商管理平台存储函数

--银行存取款机存储过程

-模块2、银行存取款机触发器

--4.2.1INSERT触发器

--任务实施:银行存取款机INSERT触发器

--实践小课堂:宠物电商管理平台INSERT触发器

--4.2.2UPDATE触发器

--任务实施:银行存取款机UPDATE触发器

--实践小课堂:宠物电商管理平台UPDATE触发器

--4.2.3DELETE触发器

--任务实施:银行存取款机DELETE触发器

--实践小课堂:宠物电商管理平台DELETE触发器

--银行存取款机触发器

教学情境五、银行存取款机数据库安全性

-模块1、MYSQL用户管理

--模块1、MYSQL用户管理

--MYSQL用户管理

-模块2、MYSQL权限管理

--模块2、MYSQL权限管理

--MYSQL权限管理

-模块3、MYSQL数据库的锁机制

--MYSQL数据库的锁机制

--MYSQL数据库的锁机制

-模块4、MYSQL备份和恢复

--模块4、MYSQL备份和恢复

--MYSQL备份和恢复

4.2.1INSERT触发器笔记与讨论

也许你还感兴趣的课程:

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