2022年数据库触发器分享

上传人:re****.1 文档编号:567388256 上传时间:2024-07-20 格式:PDF 页数:4 大小:70.06KB
返回 下载 相关 举报
2022年数据库触发器分享_第1页
第1页 / 共4页
2022年数据库触发器分享_第2页
第2页 / 共4页
2022年数据库触发器分享_第3页
第3页 / 共4页
2022年数据库触发器分享_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《2022年数据库触发器分享》由会员分享,可在线阅读,更多相关《2022年数据库触发器分享(4页珍藏版)》请在金锄头文库上搜索。

1、实验十一触发器实验目的 : 1理解触发器的基本概念及工作原理;2掌握触发器的创建、查看、修改和删除。实验操作触发器是一种特殊类型的存储过程,它在指定的表中的数据发生变化时(执行 INSERT、DELETE 和 UPDATE 语句)自动生效。使用触发器可以实现比CHECK 约束更为复杂的用户自定义完整性规则。一. 触发器的工作原理由于使表中数据发生变化的操作有插入、更新和删除,所以触发器可以分为三类:INSERT 触发器、 UPDATE 触发器和DELETE 触发器。1 INSERT 触发器工作过程当试图向表中插入记录时,INSERT 触发器(如果有)自动执行,此时系统自动创建一个 insert

2、ed 表,新的记录被添加到触发器表和inserted 表。触发器可以检查inserted 表,确定是否执行触发器动作和如何执行触发器动作。2 DELETE 触发器工作过程当试图从表中删除信息时,DELETE 触发器被触发, 此时系统自动创建一个deleted 表,被删除的行被放置到这个特殊的表中。被删除的行在触发器表中将不再存在。因此, 触发器表和 deleted表之间没有共同的记录。3 UPDATE 触发器工作过程UPDATE 语句可以看成两步,删除一条旧记录,插入一条新记录。所以,UPDATE 触发器被触发时, 自动创建一个deleted表和一个 inserted表, UPDATE 语句使

3、原始行移入deleted表,将更新行插入到inserted 表中。二. 触发器的创建创建触发器主要使用T-SQL 语句 CREATE TRIGGER 命令,该命令的语法格式如下:CREATE TRIGGER 触发器名称ON 表名 | 视图名 WITH ENCRYPTION FOR | AFTER | INSTEAD OF DELETE , INSERT , UPDATE AS sql 语句 .n 语句中的WITH ENCRYPTION,表示对定义脚本加密。AFTER 用于指定触发器只有在触发SQL 语句中指定的所有操作都已成功执行后才激发,并且不能在视图上定义AFTER 触发器。 FOR 的作

4、用与AFTER 相同。 INSTEAD OF 用于指定执行触发器而不是执行触发SQL 语句,从而替代触发语句的操作。INSTEAD OF 触发器常用于影响多个基表的更新视图操作。实验操作1: 为学生表创建一个名为INSERT_XS 的 INSERT 触发器,触发器可以显示当前名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 4 页 - - - - - - - - - 插入的新记录,并对触发器进行验证。1)启动 Management Studio 2)新建查询,在查询编辑窗口

5、中输入如下代码:USE JXGL GO -创建触发器CREATE TRIGGER INSERT_XS ON XS AFTER INSERT AS SELECT * FROM INSERTED GO -验证触发器INSERT INTO XS VALUES(05050101, 张能宝 , 0, 1982-11-09, 5) 3)单击工具栏中的“执行”或直接按下F5实验操作2 为课程表创建更新触发器Update_KC,若更新了学时字段XSS,-则触发器强制学分XF 等于 XSS/20。1)启动 Management Studio 2)新建查询,在查询编辑窗口中输入如下代码:USE JXGL GO C

6、REATE TRIGGER Update_KC ON KC AFTER UPDA TE AS IF UPDA TE(XSS) -判断是否更新了XSS 列UPDATE KC SET XF = INSERTED.XSS / 20 FROM KC JOIN INSERTED ON KC.KCH = INSERTED.KCH GO 3)单击工具栏中的“执行”或直接按下F5实验操作3为 KCCJ 视图建立名为UPDATE_KCCJ 的 INSTEAD OF 触发器,实现可以在一个 UPDATE 语句中同时更新KCCJ 视图的 XM 、KCMC 、PSCJ、SJCJ 和 QMCJ 中的两列或多列。并进行验

7、证。说明:使用视图更新数据是不能影响多个基表的,而我们可以利用INSTEAD OF 触发器的特点, 将影响多个基表的视图更新操作转换为分别更新对应的基表。根据这一思路, 本题所要求的触发器如下所示。1)启动 Management Studio 2)新建查询,在查询编辑窗口中输入如下代码:USE JXGL GO CREATE TRIGGER UPDA TE_KCCJ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 4 页 - - - - - - - - - ON KCCJ

8、INSTEAD OF UPDA TE AS -判断如果更新了KCCJ 视图的 XM 列,就转化为更新XS 表的 XM 列IF UPDA TE(XM) UPDATE XS SET XM = INSERTED.XM FROM XS JOIN INSERTED ON XS.XH = INSERTED.XH -判断如果更新了KCCJ 视图的 KCMC 列,就转化为更新KC 表的 KCMC 列IF UPDA TE(KCMC) UPDATE KC SET KCMC = INSERTED.KCMC FROM KC JOIN INSERTED ON KC.KCH = INSERTED.KCH -判断如果更新了

9、KCCJ 视图的 PSCJ、SJCJ或 QMCJ 列,就转化为更新CJ 表的对应列IF UPDA TE(PSCJ) OR UPDATE(SJCJ) OR UPDA TE(QMCJ) UPDATE CJ SET PSCJ = INSERTED.PSCJ, SJCJ = INSERTED.SJCJ, QMCJ = INSERTED.QMCJ FROM CJ JOIN INSERTED ON (CJ.XH = INSERTED.XH AND CJ.KCH = INSERTED.KCH) GO -对 UPDATE_KCCJ 进行验证UPDATE KC_CJ SET KCMC = 程序设计基础 , SJ

10、CJ = SJCJ * 1.1 WHERE KCMC = C程序设计 GO 3)单击工具栏中的“执行”或直接按下F5三. 触发器的修改修改触发器主要使用T-SQL 语句 ALTER TRIGGER命令,该命令的语法格式如下:ALTER TRIGGER 触发器名称ON 表名 | 视图名 WITH ENCRYPTION FOR | AFTER | INSTEAD OF DELETE , INSERT , UPDATE AS sql 语句 .n 实验操作4 将实验操作2 中创建的触发器Update_KC 修改为当向课程表中插入或更新数据时显示新插入或更新记录信息。1)启动 Management St

11、udio 2)新建查询,在查询编辑窗口中输入如下代码:USE JXGL GO 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 4 页 - - - - - - - - - ALTER TRIGGER Update_KC ON KC AFTER INSERT, UPDA TE AS SELECT * FROM INSERTED GO 3)单击工具栏中的“执行”或直接按下F5四. 触发器的删除删除触发器可以使用DROP TRIGGER 命令,此命令的语法如下:DROP TRIG

12、GER 触发器名 ,.n 实验操作5将 Update_KC 和 INSERT_XS 触发器删除。1)启动 Management Studio 2)新建查询,在查询编辑窗口中输入如下代码:USE JXGL GO DROP TRIGGER Update_KC, INSERT_XS 3)单击工具栏中的“执行”或直接按下F5实验练习实验练习1:为成绩表创建DELETE 触发器 DELETE_CJ ,触发器可以显示当前被删除的记录,并进行验证。实验练习2:为课程表建立名为MODIFY_KC的触发器,当向表中插入或更新数据时,触发器能打印显示影响的课程数和学时总数。实验练习3: 为成绩表创建触发器Inse

13、rt_CJ ,当插入成绩时,触发器能强制每个学生所学课程数不超过10 门。提示:触发器可以检查由于新记录的插入,是否出现了有学生的总课程数超过10 门,若超过则撤消插入操作(用ROLLBACK TRANSACTION) 。实验练习4: 为成绩表创建触发器Modify_CJ ,当插入成绩记录或是更新到PSCJ 、SJCJ 或QMCJ 时,触发器能自动更新ZP为 PSCJ * 0.2 + SJCJ * 0.3 + QMCJ * 0.5。实验练习5:为 BJXSRS视图创建名为BKGX 的 INSTEAD OF触发器,当更新BJXSRS时,触发器打印输出“此视图不可更新!” 。并进行验证。实验练习6:修改实验练习1 中创建的 DELETE_CJ 触发器,触发器能打印显示被删除的记录中成绩不及格的记录数。实验练习7:将 MODIFY_KC和 Insert_CJ 触发器删除。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 4 页 - - - - - - - - -

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号