- 1
- 0
- 约1.13千字
- 约 11页
- 2021-11-20 发布于上海
- 举报
SQL与可编程对象
触发器
为什么需要触发器?
触发器一般用来监视数据库,以便及时进行一些数据维护工作。
例如:
实现比数据完整性约束更为复杂的其他限制;
级联修改数据库中相关的表数据;
及时取消不合适的更新操作,防止恶意或错误地使用数据库。
例子:当某个学生选了某一门课程之后,需要对数据库中的数据进行以下修改:
选课表中插入一条记录
将选择该课程的选课人数增加1
选课人数的更新能不能自动完成呢?
数据库中的部分关系模式:
学生(学号,姓名,…)
选课(学号,课程号,成绩)
课程(课程号,课程名,选课人数,…)
触发器的定义
触发器是一种特殊的存储过程。当对数据库进行更新操作时被触发自动执行。
不需要显式调用!
设置触发器需要指明以下两方面内容:
什么条件下触发?
触发后执行时的动作
触发器的分类
建在表上,执行更新数据操作时触发。视图和临时表都不支持触发器。
按触发时刻分两类:
Insert
Update
Delete
触发器
AFTER触发器: 在表中数据修改之后触发,默认类型。
BEFORE触发器:在表中数据修改以前触发。
使用 SQL语句创建触发器
CREATE TRIGGER tri_courseenroll
AFTER INSERT ON courseenroll
FOR EACH ROW
UPDATE course SET StudentNum = StudentNum +1
WHERE CourseCode=new.CourseCode;
例如:在courseenroll表上建立触发器,当添加新的选课记录时,自动修改course表中的选课人数。
例子:当某个学生选了某一门课程之后
选课表中插入一条记录
将选择该课程的选课人数增加1
触发器的临时表:old 表和 new 表
触发器工作时自动创建和管理的两个临时表,用于记录数据变动情况。
更新操作
new表
old表
Insert
存新增的记录
----
Delete
----
存被删的记录
Update
存修改后的记录
存修改前的记录
某列的值用“new.列名”和“old.列名”表示
使用图形工具创建触发器
例如:在student表上创建一个触发器tri_deletestudent,当删除一条学生记录时,将该学生在courseenroll表中的选课记录全部删除。
触发器名称
触发时间
触发事件
执行的动作
维护触发器
修改名称
触发时间
触发事件
执行动作( SQL代码)
触发器的定义
触发器是一种特殊的存储过程。当对数据库进行更新操作时被触发自动执行。
不需要显式调用!
设置触发器需要指明以下两方面内容:
什么条件下执行触发器?
触发器执行时的动作
THANK YOU!
原创力文档

文档评论(0)