《11-2 触发器.PPT》由会员分享,可在线阅读,更多相关《11-2 触发器.PPT(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC数据库实现与维护项目模块项目模块1111: :“销售管理数据库销售管理数据库”中的高级对象中的高级对象 任务11-2 “销售管理”数据库中的触发器任务描述辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC任务描述:销售部门经理找到小赵,说发现他统计的一些数据与实际情况不符,小赵感觉这是不可能的,因为数据的查询命令都是他反复验证过的。经过他对经理所说情况的分析,原来是其他管理员在录入和管理数据时出现了错误,导致数据库中出现了错误数据。为了杜绝这种情况的再次发生,小赵决定引入触发器机制,让系统自动
2、地对数据维护进行监督。任务涉及知识及技能点辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC知识点:触发器的基本概念触发器的类型DELETED和INSERTED表触发器的创建语句技能点:使用CREATE TIGGER创建存储过程 任务目标及提示辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC任务目标:掌握触发器的创建方法理解INSERTED和DELETED表的内容任务提示:触发器属于数据库中的高级应用,需要创建者拥有丰富的应用经验,所以在本任务的实施过程中,重点是对各类触发器的认识以及基本创建语法的掌握。要想真正应用触发器来提升数据库的安全
3、性与准确性,需要在学习和工作过程中逐步积累实际工程经验。导入 辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC在数据库的运行和使用中,我们可不可以要求系统在某件事情发生后使另一件事情也同时执行呢?这样可以给我们的工作带来很多便利。授课 辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC一、布置任务一、布置任务根据任务工单及教师描述接受任务。在“买家表”上创建一名为tr_insert_mj的触发器,当向“买家表”进行插入操作时激发该触发器,并给出提示信息“有新买家插入到表中!”。在“买家表”上创建一名为tr_update_mj的触发器,当修改
4、“买家表”中的数据时激发该触发器,并给出提示信息“你已修改买家表!”。同时写出触发语句。在“买家表”上创建一名为tr_delete_mj的触发器,当删除“买家表”中的数据时激发该触发器,并给出提示信息“你已删除买家表中相关数据!”。 等其他任务授课 辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC二、知识准备二、知识准备1. 触发器的概念触发器的概念触发器是一种特殊类型的存储过程。与存储过程类似,它也是由SQL语句组成,可以实现一定的功能;不同的是,触发器的执行不能通过名称调用来完成,而是当用户对数据库发生事件(添加、更新或删除)时,将会自动触发与该事件相关的触发器
5、,使其自动执行。授课 辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC2. 触发器的优点触发器的优点触发器是自动的,当用户对表中的数据做了相应的修改之后可以立即被激活。触发器是其他约束的一个有力补充。主要优点如下。实施更为复杂的数据完整性约束和数据一致性。级联修改数据库中所有相关的表,自动触发其他与之相关的操作。跟踪变化,撤销或回滚违法操作,防止非法修改数据。触发器可以返回自定义的错误信息,而约束无法返回信息。触发器可以调用更多的存储过程。授课 辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC3. 触发器分类触发器分类触发器可以分为两大类
6、,即DML触发器和DDL触发器。(1)DML触发器DML触发器是对表或视图进行了INSERT、UPDATE和DELETE操作而被激活的触发器,该类触发器有助于在表或视图中进行修改数据时强制业务规范扩展数据完整性。DML触发器又分为:AFTER触发器、INSTEAD OF触发器。1)AFTER触发器又称为后触发器,该类触发器是在引起触发器执行的修改语句成功完成之后执行2)INSTEAD OF触发器又称为替代触发器,当遇到DML语句时,不会执行DML的具体操作,而转去执行触发器本身的操作。授课 辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC(2)DDL触发器DDL触发
7、器像DML触发器一样,在响应事件时执行触发器中的内容。但与DML触发器不同的是,它们并不在响应对表或视图执行UPDATE、INSERT或DELETE语句时执行存储过程。它们主要在响应数据定义语言(DDL)语句时执行存储过程。授课 辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC4. 与触发器相关的两个专用临时表与触发器相关的两个专用临时表INSERTED、DELETED系统为每个触发器创建专用临时表,其表结构与触发器作用的表结构相同;这两张表都存在于高速缓存中由系统维护,用户可以对其进行查询,但不能修改;触发器执行完后,相关临时表被删除。授课 辽宁机电职业技术学院
8、LIAONING JIDIAN POLYTECHNIC5.DML触发器的创建触发器的创建创建DML触发器的语法如下:CREATE TRIGGER 触发器名 ON 表名| 视图名 FOR | AFTER|INSTEAD OF INSERT,UPDATE,DELETE AS SQL语句组授课 辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC6. DDL触发器触发器创建DDL触发器的语法如下:CREATE TRIGGER触发器名ON ALL SERVER | DATABASE FOR | AFTER event_type | event_group ,.n ASSQL语句
9、组授课 辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC7. 触发器的修改触发器的修改修改DML触发器的语法如下:ALTER TRIGGER 触发器名 ON 表名| 视图名 FOR | AFTER|INSTEAD OF INSERT,UPDATE,DELETE AS SQL语句组授课 辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC8. 触发器的删除触发器的删除如果触发器已经失去它存在的价值,可以删除触发器,释放资源。删除触发器格式:DROP TRIGGER 触发器名 ,n授课 辽宁机电职业技术学院 LIAONING JIDIAN POL
10、YTECHNIC9. 触发器的启用与禁用触发器的启用与禁用(1)禁用触发器1)使用ALTER TABLE语句禁用触发器,代码如下:ALTER TABLE 表名DISABLE TRIGGER 触发器名2)用DISABLE TRIGGER命令直接禁用,代码如下:DISABLE TRIGGER触发器名ON表名(2)启用触发器1)使用ALTER TABLE语句启用触发器,代码如下:ALTER TABLE 表名ENABLE TRIGGER 触发器名2)用ENABLE TRIGGER命令直接禁用,代码如下:ENABLE TRIGGER 触发器名ON 表名(3)禁用数据库级触发器DISABLE TRIGGE
11、R 触发器名 ON DATABASE授课 辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC三、任务实现三、任务实现1. 简单触发器例11-8 在“买家表”上创建一名为tr_insert_mj的触发器,当向“买家表”进行插入操作时激发该触发器,并给出提示信息“有新买家插入到表中!”。代码如下:CREATE TRIGGER tr_insert_mjON 买家表 FOR INSERT -指定触发类型AS PRINT 有新买家插入到表中!GO授课 辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC例11-9 在“买家表”上创建一名为tr_updat
12、e_mj的触发器,当修改“买家表”中的数据时激发该触发器,并给出提示信息“你已修改买家表!”。同时写出触发语句。代码如下:CREATE TRIGGER tr_update_mjON 买家表 FOR UPDATE -指定触发类型AS PRINT 你已修改买家表!GOUPDATE 买家表 SET 级别=J02 WHERE 买家编号=M06GO授课 辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC2. INSTEAD OF触发器触发器 例11-11 在“买家表”上创建一替代触发器tr_insted_del_mj,当删除“买家表”中的数据时激发该触发器,并给出提示信息“检查
13、数据是否被删除”。同时写出触发语句。代码如下:CREATE TRIGGER tr_insted_del_mjjbON 买家级别表 INSTEAD OF DELETE -指定触发类型AS PRINT 检查数据是否被删除GODELETE 买家级别表 WHERE 级别编号=J05 -找一表中有的记录删除GO授课 辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC3. 级联触发器(临时表级联触发器(临时表INSERTED、DELETED的用法)的用法)例11-12 对主表的删除。在“商品类型表”上创建一删除触发器tr_del_splx,达到以下目的:当删除一行数据时,应检查此
14、行的“类型编号”是否还在“商品表”的“类型”中,如果存在,刚才的删除就应被否定(事务回滚),并给出提示信息“此数据正用不应删除!”;否则就删除。代码如下: CREATE TRIGGER tr_del_splxON 商品类型表FOR DELETEASDECLARE lxbh CHAR(3)SELECT lxbh=类型编号 FROM DELETED IF EXISTS(SELECT * FROM 商品表 WHERE 类型=lxbh)BEGINPRINT 此数据正用不应删除!ROLLBACK TRANSACTION -事务回滚ENDGO授课 辽宁机电职业技术学院 LIAONING JIDIAN PO
15、LYTECHNIC4. UPDATE()函数()函数例11-15 主从表中的数据同步修改。在“商品类型表”上创建一修改触发器tr_update_splx,达到以下目的:当修改的是“类型编号”时,应同步修改“商品表”中的“类型”。代码如下: CREATE TRIGGER tr_update_splx ON 商品类型表FOR UPDATEAS IF UPDATE(类型编号) -类型编号被修改,则条件为真 BEGIN DECLARE 原类型编号 char(3),新类型编号 char(3) SELECT 原类型编号=DELETED.类型编号, 新类型编号= INSERTED.类型编号 FROM DEL
16、ETED,INSERTED UPDATE 商品表 set 类型=新类型编号 WHERE 类型=原类型编号 ENDGO授课 辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC 5.DDL触发器触发器 例11-16 创建一个DDL触发器tr_drop_ddl,当删除数据库中的表时,就撤销该操作,并提示:“禁止删除数据表!”。代码如下: CREATE TRIGGER tr_drop_ddl ON DATABASEFOR DROP_TABLEAS ROLLBACK TRANSACTIONPRINT 禁止删除数据表! GO授课 辽宁机电职业技术学院 LIAONING JIDIA
17、N POLYTECHNIC6. 触发器的修改触发器的修改 例11-18 修改例11-8中创建的触发器,将提示信息修改为“有新数据填入买家表”。代码如下: ALTER TRIGGER tr_insert_mjON 买家表 FOR INSERT -指定触发类型AS PRINT 有新买家插入到表中!GO授课 辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC7. 触发器的启用与禁用触发器的启用与禁用(1)禁用触发器 例11-19 禁用“买家表”中的tr_insert_mj触发器,可以通过两种方式实现,代码如下: ALTER TABLE 买家表DISABLE TRIGGER tr_insert_mj或者:DISABLE TRIGGER tr_insert_mj ON 买家表(2)启用触发器 例11-20 启用上例中禁用的触发器,可以通过两种方式实现,代码如下:ALTER TABLE 买家表ENABLE TRIGGER tr_insert_mj或者ENABLE TRIGGER tr_insert_mj ON 买家表点评及小结 辽宁机电职业技术学院 LIAONING JIDIAN POLYTECHNIC触发器在数据库中是属于比较高级的数据库对象,一定要做到熟练掌握其概念和使用方法,再将其应用到数据库中。
限制150内