- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《T-SQL触发器
触发器 本章目标 了解为什么需要触发器 理解触发器的工作原理 掌握如何使用inserted表和deleted表 掌握如何创建: INSERT触发器 UPDATE触发器 DELETE触发器 触发器的类型 DELETE 触发器 INSERT 触发器 UPDATE 触发器 INSERT触发器 DELETE触发器 UPDATE触发器 讲解要点: 当对某一表进行修改,诸如UPDATE,INSERT, DELETE这些操作时,SQL Server就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合由这些SQL语句所定义的规则。由此触发器可分为: INSERT触发器:当向表中插入数据时触发,自动执行触发器所定义的SQL语句。 UPDATE触发器:当更新表中某列多列时触发,自动执行触发器所定义的SQL语句。 DELETE触发器:当删除表中记录时触发,自动执行触发器所定义的SQL语句。 讲解要点: 1. UPDATE( )函数:测试在指定的列上进行的 INSERT 或 UPDATE 修改。 讲解要点: deleted 表:用于存储 DELETE 和 UPDATE 语句所影响的行的副本,即在deleted表中临时保存了被删除或被更新前的记录行。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中。由此我们可以从deleted 表中检查删除的数据行是否能删除。如果不能,就可以回滚撤销此操作,因为触发器本身就是一个特殊的事务单元。 inserted 表:用于存储 INSERT 和 UPDATE 语句所影响的行的副本,即在inserted 表中临时保存了被插入或被更新后的记录行。在执行INSERT 或 UPDATE 语句时,新加行被同时添加到 inserted 表和触发器表中。由此我们可以从inserted检查插入的数据是否满足业务需求。如果不满足,就可以向用户报告错误消息,并回滚撤销操作。 更新(UPDATE)语句类似于在删除之后执行插入;首先旧行被复制到 deleted 表中,然后新行被复制到触发器表和 inserted 表中。 提问学员:如何解决上述的银行取款问题?应该创建什么触发器。 引导回答:显然我们应该在交易信息表上创建INSERT触发器,根据交易类型(transType)字段的值是“存入”还是“支取”,“增加”或“减少”对应帐户的余额。 再次提问:如何获取插入数据行的交易类型以及卡号呢?我们可以检查系统自动创建的临时表inserted表,该表保存了插入数据行的备份 讲解:在不同的修改操作(增、删、改),inserted表和deleted表分别存放的信息。 演示: 演示:示例2:INSERT触发器.sql 提问:DELETE删除触发器的典型应用就是银行系统中的数据备份。当交易记录过多时,为了不影响数据访问的速度,交易信息表需要定期删除部分数据。当删除数据时,一般需要自动备份,以便将来的客户查询、数据恢复或年终统计等。如何实现呢? 引导回答:显然应在交易信息表上创建DELETE触发器,被删除的数据可以从deleted表中获取 SELECT INTO 从一个查询的计算结果中创建一个新表。 数据并不返回给客户端,这一点和普通的 SELECT 不同。 新表的字段具有和 SELECT 的输出字段相关联(相同)的名字和数据类型。 例如: 创建一个新表 films_recent, 它值包含来自 films 的最近的条目: SELECT * INTO films_recent FROM films WHERE date_prod = 2002-01-01; 还有insert into 表1 select * from 表2的问题: insert into tableB select * from tableA where userName=abc会把tableA中符合条件的纪录插入到tableB中。 演示: UPDATE更新触发器主要用于跟踪数据的变化。典型的应用就是银行系统中,为了安全起见,一般要进求每次交易金额不能超过一定的数额。 问题:跟踪用户的交易,交易金额超过20000元,则取消交易,并给出错误提示。 分析:用户每次的交易金额,我们可以从交易信息表中直接获取,也可以根据帐户信息表中余额的变化来获取。交易的方式较多,用户可能用卡消费、也可能用存折消费,存折的交易信息与卡略有不同,可能不会将交易信息存放在交易信息表中,而保存在其它表中。但存折和卡对应的帐号余额只有一个,所以更安全的方案就是:根据帐户信息表(bank)中余额的变化来获取交易金额。为了获取余额的变化,我们应该在帐户信息表上创建UPDATE触发器。更新操作可以视为两步操作: 删除更改前原有的数据行:删除的数据转
文档评论(0)