人人范文网 范文大全

网络数据库讲稿(触发器)

发布时间:2020-03-04 01:09:43 来源:范文大全 收藏本文 下载本文 手机版

网络数据库讲稿

3/26/2013

触发器

P191

一、触发器概述

1.是一种特殊的存储过程。

2.不能被显式调用,只能由一些特定的操作(命令)引发(激活),这些命令是:INSERT、DELETE、UPDATE、CREATE、ALTER、DROP、GRANT、DENY、REVOKE等。 3.每个触发器由三部分组成

①触发器名称:命名规则与变量名、存储过程名相同; ②激活该触发器的操作(命令动词)。 ③一个存储过程。

4.使用触发器可强制实现数据的一致性和完整性。

二、触发器的分类(按引发命令分类) 及其工作原理

1.DML触发器(表级) (1)触发器必须依附于某一个表(触发器必须被包含在某一个表中)。 (2)激活该触发器的操作:可以是INSERT、DELETE、UPDATE之一。 (3)当上述操作发生在包含触发器的表上时,触发器中的过程被自动执行。 (4)支持两种类型的触发器: ①AFTER 可以为同一表的同一操作定义多个该类型的触发器,并可定义执行顺序; ②INSTEAD OF 同一表的同一操作只能定义一个该类型的触发器。 (5)工作原理

P193 临时逻辑表INSERTED和DELETED。 2.DDL触发器(数据库级和服务器级) (1)触发器必须依附于某一个数据库(触发器必须被包含在某一个数据库中)。

(2)激活该触发器的操作:可以是CREATE、ALTER、DROP、GRANT、DENY、REVOKE等之一。

(3)当上述操作发生在包含触发器的数据库上时,触发器中的过程被自动执行。 (4)只有AFTER型触发器。

三、创建DML触发器

P194 用命令CREATE TRIGGER创建 例: 1.

CREATE TRIGGER 增加学生学分 ON 成绩

//只能增加一条记录

FOR INSERT AS DECLARE @XH CHAR(6),@KCH CHAR(8),@FS DECIMAL(4,1) SELECT @XH=学号,@KCH=课程编号,@FS=分数 FROM INSERTED IF @FS>=60

77

网络数据库讲稿

3/26/2013

UPDATE 学生 SET 已修学分

=已修学分+(SELECT 学分 FROM 课程 WHERE 课程编号=@KCH)

WHERE 学号=@XH 2.

CREATE TRIGGER 减少学生学分 ON 成绩 FOR DELETE AS UPDATE 学生 SET 已修学分=已修学分-(SELECT SUM(学分) FROM 课程 WHERE 课程编号 IN (SELECT DISTINCT 课程编号 FROM DELETED WHERE 学生.学号=DELETED.学号 AND 分数>=60)) WHERE EXISTS (SELECT DISTINCT 课程编号 FROM DELETED WHERE 学生.学号=DELETED.学号 AND 分数>=60) 3.CREATE TRIGGER 修改学生学分 ON 成绩 FOR UPDATE AS UPDATE 学生 SET 已修学分=已修学分-(SELECT SUM(学分) FROM 课程 WHERE 课程编号 IN (SELECT DISTINCT 课程编号 FROM DELETED WHERE 学生.学号=DELETED.学号 AND 分数>=60)) WHERE EXISTS (SELECT DISTINCT 课程编号 FROM DELETED WHERE 学生.学号=DELETED.学号 AND 分数>=60) UPDATE 学生 SET 已修学分=已修学分+(SELECT SUM(学分) FROM 课程WHERE 课程编号 IN (SELECT DISTINCT 课程编号 FROM INSERTED WHERE 学生.学号=INSERTED.学号 AND 分数>=60)) WHERE EXISTS (SELECT DISTINCT 课程编号 FROM INSERTED WHERE 学生.学号=INSERTED.学号 AND 分数>=60)

4.“修改学生学分”也可改为:

CREATE TRIGGER 修改学生学分 ON 成绩 FOR UPDATE AS UPDATE 学生 SET 已修学分=(SELECT SUM(学分) FROM 课程 WHERE 课程编号 IN

78

网络数据库讲稿

3/26/2013 (SELECT 课程编号 FROM 成绩

WHERE 学生.学号=成绩.学号 AND 分数>=60))

然后可执行下列命令,并检验执行结果。

--INSERT INTO 成绩 VALUES(\'200202\',\'L2020308\',83) --INSERT INTO 成绩 VALUES(\'200202\',\'L2030501\',80) --INSERT INTO 成绩 VALUES(\'200202\',\'L2030506\',75) --DELETE FROM 成绩 WHERE 学号=\'200202\' AND LEFT(课程编号,1)=\'L\' --UPDATE 成绩 SET 分数=80 WHERE 学号=\'200202\' AND LEFT(课程编号,1)=\'L\'

四、创建DDL触发器

P198 例: 1. P199 2.CREATE TRIGGER 禁删数据库ON ALL SERVER FOR DROP_DATABASE AS PRINT \'请不要删除数据库!\' ROLLBACK TRANSACTION

DROP DATABASE 订货管理

五、嵌套触发器和递归触发器

P199, P200

六、管理触发器

P201 1.查看 2.修改 3.禁用 4.删除

--根据成绩表计算每个学生的已修学分

update 学生set 已修学分=(select sum(学分) from 课程 where 课程编号in (select 课程编号from 成绩where 学生.学号=成绩.学号 and 分数>=60))

--修改插入触发器,使得向成绩表中插入多条记录,也能成功执行 CREATE TRIGGER 插入学生学分ON 成绩 FOR insert

79

网络数据库讲稿

3/26/2013 AS UPDATE 学生SET 已修学分=已修学分+(SELECT SUM(学分) FROM 课程 WHERE 课程编号IN (SELECT DISTINCT 课程编号FROM inserted WHERE 学生.学号=inserted.学号AND 分数>=60)) WHERE EXISTS (SELECT DISTINCT 课程编号FROM inserted WHERE 学生.学号=inserted.学号AND 分数>=60)

select * from 成绩

select 学号,已修学分from 学生

INSERT INTO 成绩VALUES(\'200202\',\'L2020308\',83) INSERT INTO 成绩VALUES(\'200202\',\'L2030501\',80) INSERT INTO 成绩VALUES(\'200202\',\'L2030506\',75) INSERT INTO 成绩VALUES(\'200201\',\'L2020308\',83) INSERT INTO 成绩VALUES(\'200201\',\'L2030501\',80) INSERT INTO 成绩VALUES(\'200201\',\'L2030506\',75)

select * into 备份成绩from 成绩 //备份成绩表 select 学号,姓名,已修学分from 学生

insert into 成绩 select * from 成绩

INSERT INTO 成绩VALUES(\'200212\',\'L2030506\',75)

80

网络数据库讲稿(触发器)[小编推荐]

网络数据库讲稿(概论)

网络数据库讲稿(复制)

网络数据库讲稿(查询)

网络数据库讲稿(存储过程)

Oracle数据库触发器京桥大学

网络数据库讲稿(表数据操作)

网络数据库讲稿(客户端开发编程)

网络数据库讲稿(索引、关系、视图)

网络数据库教案

网络数据库讲稿(触发器)
《网络数据库讲稿(触发器).doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档