触发器-2资料.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
银行的取款机系统 帐户信息表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触发器 transInfo cardID transType transMoney 1001 0002 1001 0002 存入 300 存入 500 inserted cardID transType transMoney 1001 0001 支取 200 transInfo cardID transType transMoney 1001 0002 1001 0002 存入 300 存入 500 1001 0001 支取 200 插入记录行 触发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?ba

文档评论(0)

希望之星 + 关注
实名认证
文档贡献者

我是一名原创力文库的爱好者!从事自由职业!

1亿VIP精品文档

相关文档