触发器-2论述.ppt

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
银行的取款机系统 帐户信息表bank 交易信息表transInfo 张三取钱200 问题: 没有自动修改张三的余额 最优的解决方案就是采用触发器: 它是一种特殊的存储过程 也具备事务的功能 它能在多表之间执行特殊的业务规则 张三开户1000元,李四开户1元 什么是触发器 -1 赵六 插入 删除 触发器触发 赵六退休 赵六 员工表 退休员工表 什么是触发器 -2 触发器是在对表进行插入、更新或删除操作时自动执行的存储过程,不能直接调用 触发器通常用于强制业务规则,优越于检查约束 触发器是一种高级约束,可以定义比用CHECK 约束更为复杂的约束 可执行复杂的SQL语句(if/while/case) 可引用其它表中的列 什么是触发器 -3 触发器定义在特定的表上,与表相关 自动触发执行 不能直接调用 是一个事务(可回滚) 触发器的类型 DELETE 触发器 INSERT 触发器 UPDATE 触发器 inserted 和deleted 表-1 触发器触发时: 系统自动在内存中创建deleted表或inserted表 只读,不允许修改;触发器执行完成后,自动删除 inserted 表 临时保存了插入或更新后的记录行 可以从inserted表中检查插入的数据是否满足业务需求 如果不满足,则向用户报告错误消息,并回滚插入操作 deleted 表 临时保存了删除或更新前的记录行 可以从deleted表中检查被删除的数据是否满足业务需求 如果不满足,则向用户报告错误消息,并回滚插入操作 inserted 和deleted 表-2 修改操作 inserted表 deleted表 增加(INSERT)记录 存放新增的记录 ------ 删除(DELETE)记录 ----- 存放被删除的记录 修改(UPDATE)记录 存放更新后的记录 存放更新前的记录 inserted表和deleted表存放的信息 如何创建触发器 创建触发器的语法: CREATE TRIGGER trigger_name ON table_name [WITH ENCRYPTION] FOR [DELETE, INSERT, UPDATE] AS T-SQL语句 GO WITH ENCRYPTION表示加密触发器定义的SQL文本 DELETE, INSERT, UPDATE指定触发器的类型 INSERT触发器 插入记录行 触发insert触发器。向inserted表中插入新行的副本 触发器检查inserted表中插入的新行数据,确定是否需要回滚或执行其他操作 INSERT触发器的工作原理: INSERT 触发器示例 问题: 解决上述的银行取款问题:当向交易信息表(transInfo)中插入一条交易信息时,我们应自动更新对应帐户的余额。 分析: 在交易信息表上创建INSERT触发器 从inserted临时表中获取插入的数据行 根据交易类型(transType)字段的值是存入/支取, 增加/减少对应帐户的余额。 Insert触发器示例-2 create?trigger?trig_transInfo?? ????on?transInfo?? ????for?insert?? ????as?? ??????declare?@type?char(4),@outMoney?money?? ????declare?@myCardID?char(10),@balance?money???????? ????select?@type=transType,@outMoney=transMoney,@myCardID=cardID?from?inserted??? ????if(@type=支取)?? ????????update?bank?set?currentMoney=currentMoney-@outMoney?where?cardID=@myCardID?? ????else?? ????????update?bank?set?currentMoney=currentMoney+@outMoney?where?cardID=@myCardID?? ? print?交易成功!交易金额:+convert(varchar(20),@outMoney)?? ????select?@balance=currentMoney?from?bank?where?cardID=@myCardID?? ????print?卡号+@myCardID+???余额:+convert(varchar(20),@balance)?? go?? 从inserted表中获取被删除的交易记录 Insert触发器示例-3 /*---测试触发器执行结果----*

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档