第十章存储过程触发器及自定义函数2.ppt
《第十章存储过程触发器及自定义函数2.ppt》由会员分享,可在线阅读,更多相关《第十章存储过程触发器及自定义函数2.ppt(49页珍藏版)》请在三一办公上搜索。
1、数据库实用技术SQL Server 2008,第十章 存储过程、触发器 和自定义函数,棱帕等寸聊酮取兴印感蛆冲鸯见轨翘边锈无拷恕拄峭肘合壮寂捞庆睦串能第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,第十章 存储过程、触发器、自定义函数,SQL Server 2008,匣产番朔弱凶壮得眼替信递好代顶吩每唇馈漠戌侨骑屡虱梦灵衅等填版持第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,为什么需要触发器(TRIGGER)呢?典型的应用就是银行的取款机系统,为什么需要触发器,演示:为什么需要触发器.sql,帐户信息表bank,交易信息表transInfo,张三取
2、钱200 问题:没有自动修改张三的余额,最优的解决方案就是采用触发器:它是一种特殊的存储过程 也具备事务的功能 它能在多表之间执行特殊的业务规则,张三开户1000元,李四开户1元,毯尺答诸凑咋绣踩愉唬沏村你洱坚掸盛探挽豁哆眶宴乔净越力剥堵镀数娜第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,赵二,插入,什么是触发器,删除,触发器触发,赵二退休,赵二,员工表,退休员工表,硫侩拌湿镣音降隅磋龋晤哨奏蹬审当蝶满卷控阮饮腑竖虑祸鞠授归霞苫抡第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,10.2 触发器,10.2.1 触发器概念触发器(Trigger)是在对
3、表进行插入、更新或删除操作时自动执行的存储过程。触发器通常用于强制业务规则触发器是一种高级约束,可以定义比用CHECK 约束更为复杂的约束 可执行复杂的SQL语句(if/while/case)可引用其它表中的列,第十章 存储过程、触发器、自定义函数,SQL Server 2008,洁兔矽考兢砾诌礼北缘欠休拣特蔼挚揪捎拷芬薄趴炽勺均禾靖知药谗闺缓第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,触发器的优点(1)触发器自动执行;(2)可以调用存储过程;(3)可以强化数据条件约束;常用来实现复杂的数据完整性。(4)触发器可以禁止或回滚违反引用完整性的更改;(5)级联、并行运行;
4、(6)触发器可以嵌套。,畅寝斌骆啄坟讼曝翻恭蚁肢接思构环毯哈叠盼滦蔓材烂盘桐拼镭堤夹繁娩第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,10.2 触发器,SQL Server 2008提供三类触发器:DML触发器:在数据库中发生数据操作(如:INSERT、UPDATE、DELETE)事件时自动执行。DDL触发器:在服务器或数据库中发生数据定义(如:CREATE、ALTER、DROP)事件时自动执行。该类触发器可用于执行一些数据库管理任务。登录触发器:在与SQL Server实例建立用户会话时自动执行,主要用来审核和控制服务器会话。为响应 LOGON 事件而激发存储过程。,
5、第十章 存储过程、触发器、自定义函数,SQL Server 2008,代胰棺麓擎抢剥阐稻侮懦市疫疫摔唤扮要凝代耙娘权飘缆爵冷孵幻谱天耪第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,触发器触发时:系统自动在内存中创建deleted表或inserted表只读,不允许修改;触发器执行完成后,自动删除inserted 表 临时保存了插入或更新后的记录行 可以从inserted表中检查插入的数据是否满足业务需求 如果不满足,则向用户报告错误消息,并回滚插入操作deleted 表临时保存了删除或更新前的记录行 可以从deleted表中检查被删除的数据是否满足业务需求 如果不满足,则
6、向用户报告错误消息,并回滚插入操作,inserted 和deleted 表2-1,良胶碟廉讽息田雨充嚎势咏汽挟劣勾柞靠图八远速瞻匪瞄谩懦鹰浚贪到踢第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,inserted 和deleted 表2-2,inserted表和deleted表存放的信息,浦扮轮膘遂潦探酒蚊兽倍熟怖凿邱假模懊凳昨袜兼问姜式筷骚壤缘爽删葛第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,触发器,10.2.2 创建触发器1.DML触发器DML触发器在用户对表中的数据进行插入(INSERT)、修改(UPDATE)和删除(DELETE)时自动运行
7、。使用触发器模板创建触发器(略):在展开SQL Server实例中,依次展开“数据库”“BillingSys”“表”,继续展开要创建触发器的具体表节点,选择“触发器”,右击选择“新建触发器”命令,打开“查询编辑器”,在“查询编辑器”中出现触发器的编程模板。当模板修改完成后,单击窗口工具栏中的“执行”按钮,创建该触发器。,第十章 存储过程、触发器、自定义函数,SQL Server 2008,妙锗积嚎捐悦憎臂邦布乱质泪瞒误荷绿郭棉嗅抱荔斗例阀错壶葵倚贺爬莆第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,触发器,比如选择Customer表,打开触发器模板,其模板代码如下:CRE
8、ATE TRIGGER.ON AFTER AS BEGIN-SET NOCOUNT ON added to prevent extra result sets from-interfering with SELECT statements.SET NOCOUNT ON;-Insert statements for trigger hereENDGO,第十章 存储过程、触发器、自定义函数,SQL Server 2008,孟运栓戳懊古川槐和提嗡兑郴楚慷垛镊窟禁极臻恤塔央俯鸡润亭寄厩碍珠第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,触发器,使用CREATE TRIGGER创建
9、 DML触发器:语法格式如下:CREATE TRIGGER ON WITH ENCRYPTIONFOR|AFTER|INSTEAD OF-触发器的类型INSERT,UPDATE,DELETE-指定数据修改操作AST-SQL语句或语句块;,第十章 存储过程、触发器、自定义函数,SQL Server 2008,冈映僳呀囤威苫雪良辖元驰仿晋酋错肖虱崔簇耿印靛骏呕奏巨椰鹿拙霍毯第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,触发器,参数说明如下:触发器名:触发器名称,必须遵守标识符命名规则,不能以#或#开头。WITH ENCRYPTION:指定对触发器进行加密处理。FOR|AFT
10、ER:指定触发器中在相应的DML操作(INSERT、UPDATE、DELETE)成功执行后才触发。视图上不能定义FOR和AFTER触发器,只能定义INSTEAD OF触发器。INSTEAD OF:指定执行DML触发器用于“代替”引发触发器执行的INSERT、UPDATE或DELETE语句。在表或视图上,每个INSERT、UPDATE和DELETE语句最多可以定义一个INSTEAD OF触发器。INSERT,UPDATE,DELETE:指定能够激活触发器的操作,必须至少指定一个操作。,第十章 存储过程、触发器、自定义函数,SQL Server 2008,螟焚茹祖凡掺辅锰旨两云掳吩蜀赎幻毁牡旗另汲
11、虐屈耘我尽氯京垄捆爆辞第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,触发器,【例10-4】在联系人表Relationer中修改联系人ID(RID)后,同步修改客户表Customer中的联系人ID(RID),保证修改记录满足参照完整性。这是一个UPDATE触发器,其代码如下:CREATE TRIGGER Update_RIDON RelationerAFTER UPDATEAS BEGIN SET NOCOUNT ON UPDATE Customer SET RID=(SELECT RID FROM INSERTED)where RID=(SELECT RID FROM
12、DELETED)ENDGO,第十章 存储过程、触发器、自定义函数,SQL Server 2008,逾勤坪辕亿揍医拼始抄澜泽谷陀磕喜倡乎净行却恶儡赴恋犁饼渍襄井拿贤第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,触发器,在对Relationer表中RID值进行修改时,需要执行UPDATE命令。当执行UPDATE命令时,会激发Relationer表中的触发器Update_RID,同步对Customer表中的RID列值进行修改。由于Customer表中的RID列存在外键约束fk_Customer,因此,在执行UPDATE命令前,需要对外键约束进行禁用设置,执行完UPDATE命令
13、后,再启用外键约束。具体代码如下:,第十章 存储过程、触发器、自定义函数,SQL Server 2008,许设编衙伦拇单论纷嘲驻旦瘁摧脏追玲壁资佃郡惶秒伶虹狰黑秒试衫撇岭第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,触发器,-禁用外键约束ALTER TABLE Customer NOCHECK CONSTRAINTfk_Customer-更新纪录 UPDATE Relationer SET RID=20106609 where RID=20101845-启用约束ALTER TABLE Customer CHECK CONSTRAINT fk_Customer,第十章 存
14、储过程、触发器、自定义函数,SQL Server 2008,枪咸别慑晾哮吾瓤姑勘庭组贩帐鸯烦俏业包倘吹螟颜秉站炒泻灿畸浑硬暂第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,【例】创建触发器stu_delete,实现如下功能:当按照学号删除student表中的某学生记录后,对应的该学生在sc表中的记录也被自动删除。T-SQL语句为:USE stuinfoGOCREATE TRIGGER stu_Delete ON studentFOR DELETEASDELETE FROM sc WHERE sno=(SELECT sno FROM deleted)执行后,我们查询stud
15、ent表和sc表,可以看到两个表中均存在学号为20070102的学生记录。在student表中执行数据删除语句:DELETE FROM student WHERE sno=20070102student表中有一行受影响而sc表中有三行数据受影响。说明设定的触发器被触发,sc表中的相应数据被自动删除。,底交衅己竖残皮棕更男听靠览咋索霹拣细圭队邦岂刚锥综趋伺寨贰椅赂清第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,触发器,2.DDL触发器使用CREATE TRIGGER创建 DDL触发器:语法格式如下:CREATE TRIGGER ON ALL SERVER|DATABASE
16、-指定触发器的作用域WITH ENCRYPTIONFOR|AFTER-触发器的类型,nAS;,第十章 存储过程、触发器、自定义函数,SQL Server 2008,莲蜂瑰浪悬皿劣答结菠劫壶榆驳余查侯联抗赘含粹缨娃樱店酚款夜汹什黔第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,触发器,参数说明如下:ALL SERVER:指定 DDL触发器的作用域为当前服务器。如果指定了此参数,则只要当前服务器中的任何位置上出现命令中指定的事件类型或事件组,就会激发该触发器。DATABASE:指定DDL触发器的作用域为当前数据库。如果指定了此参数,则只要当前数据库中出现命令中指定的事件类型或
17、事件组,就会激发该触发器。WITH ENCRYPTION:对 CREATE TAIGGER语句的文本进行加密处理。FOR|AFTER:指定DDL触发器仅在命令中指定事件类型或事件组的所有操作都已成功执行时才被触发。事件类型:将激活DDL 触发器的T-SQL语言事件的名称。例如CREATE_TABLE、ALTER_TABLE、DROP_TABLE等操作。事件组:预定义的T-SQL语句事件分组的名称。执行任何属于事件组的T-SQL语句事件之后,都将激发DDL触发器。,第十章 存储过程、触发器、自定义函数,SQL Server 2008,凿荣础漏遂系谜鳖郧捡呕卿邻公聊千劈媳连鹏匹趁桶技哈坦忆芹钓缎温
18、删第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,触发器,【例10-5】设计 DDL触发器,禁止修改和删除当前数据库中的任何表。代码如下:CREATE TRIGGER safe_databaseON DATABASEFOR ALTER_TABLE,DROP_TABLEASBEGIN PRINT 不能修改或删除表!如果必须要完成此操作,请先禁用触发器safe_database。ROLLBACKENDGO,第十章 存储过程、触发器、自定义函数,SQL Server 2008,镐恃务筷疑枷范趾机邮柿割堪灿证闯篱叮渺拍洒可廓刘蒸疙鲁沈酿蒂叙杨第十章存储过程触发器及自定义函数2第十
19、章存储过程触发器及自定义函数2,触发器,10.2.3管理触发器1.查看触发器信息因为触发器是特殊的存储过程,所以查看触发器也是使用系统存储过程实现。如:Sp_help 触发器名称。sp_helptext 触发器名称。sp_depends 触发器名称|表名。,第十章 存储过程、触发器、自定义函数,SQL Server 2008,吉成铲贤佬焰株阑彤千芯檀唇妮树氰持淳啊瑶存奎决枣榴肄硅啊眶肩镰行第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,DDL触发器的应用,【例】创建服务器范围的DDL触发器,当创建数据库时,系统返回提示信息:“DATABASE CREATED”。T-SQL
20、语句为:CREATE TRIGGER trig_createON ALL SERVERFOR CREATE_DATABASEASPRINT DATABASE CREATED运行创建触发器后,使用语句:CREATE DATABASE demo运行结果,消息栏内出现我们设定的“DATABASE CREATED”,鸳赡施哄假吱早训块割缠睦偏宅拴讫蒸布阂猜黔捷绪耻暴巨正窿凭性懂钡第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,触发器,2.修改触发器修改DML触发器,语法格式如下:ALTER TRIGGER ON WITH ENCRYPTIONFOR|AFTER|INSTEAD O
21、FINSERT,UPDATE,DELETEAS;,第十章 存储过程、触发器、自定义函数,SQL Server 2008,秉丹淘烛甜棍球霓苯弛王产力往桃干抄瑞膝障迪吱脱泪习酿采铆圆禽孝当第十章存储过程触发器及自定义函数2第十章存储过程触发器及自定义函数2,触发器,修改DDL触发器,其语法格式如下:ALTER TRIGGER ON ALL SERVER|DATABASEWITH ENCRYPTIONFOR|AFTER,nAS;,第十章 存储过程、触发器、自定义函数,SQL Server 2008,伸咽横引咀枚拯给搔对奥具赏肇禄双娟柳它阔挥峦止辐综扮屹痘怜想位末第十章存储过程触发器及自定义函数2第十
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十 存储 过程 触发器 自定义 函数
链接地址:https://www.31ppt.com/p-5124625.html