网站大量收购闲置独家精品文档,联系QQ:2885784924

数据库上课第九讲数据库开发讲解.ppt

  1. 1、本文档共58页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库上课第九讲数据库开发讲解

4.1 触发器(TRIGGER)概述 触发器是用户定义在关系表上的一类由事件驱动的存储过程,由服务器自动激活。 触发器可进行更为复杂的检查和操作,具有更精细和更强大的数据控制能力。 触发器是一种特殊的存储过程,不管什么原因造成的数据变化都能自动响应,对于每条SQL语句,触发器仅执行一次,事务可用于触发器中。 触发程序是与表有关的,当表上出现特定事件时,将激活该对象。 表必须引用永久性表。不能将触发程序与临时表或视图关联起来。 * * 触发器 ?触发器仅在当前数据库中生成 触发器有三种类型,即插入、删除和更新; 插入、删除和更新可作为一种类型的触发器; 查询操作不会产生触发动作,没有查询触发器类型。 创建触发器的语法 mySQL语法 CREATE TRIGGER triggerName trigger_time trigger_event ON tableName FOR EACH ROW SQL-Statement SQLServer语法 CREATE TRIGGER triggerName ON tableName FOR trigger_event AS SQL-Statement * * trigger_event:激活触发程序的语句的类型。 INSERT:将新行插入表时激活触发程序,例如,通过INSERT、LOAD DATA和REPLACE语句。 · UPDATE:更改某一行时激活触发程序,例如,通过UPDATE语句。 · DELETE:从表中删除某一行时激活触发程序,例如,通过DELETE和REPLACE语句。 trigger_time:触发程序的动作时间。 BEFORE 或 AFTER SQL-Statement:触发动作的执行体 如果该触发执行体执行失败,则激活触发器的事件就会终止,且触发器的目标表tableName或触发器可能影响的其它表不发生任何变化,即执行事务的回滚操作。 * * 例 CREATE TRIGGER testref BEFORE INSERT ON table1 FOR EACH ROW BEGIN INSERT INTO table1 ...; some otherSQL; END * * 删除触发器 触发器不需要时可以删除,删除语法: DROP TRIGGER [schema_name.]trigger_name [例9.36] 删除触发器classUpt。 DROP TRIGGER ScoreDB.classUpt * * 触发器的作用 触发器常用于保证完整性,并在一定程度上实现安全性,如可以用触发器来进行审计; 例如,创建触发器,只有数据库拥有者才可以修改成绩表中的成绩,其它用户对成绩表的插入、删除和修改操作必须记录下来; 用触发器定义动态的默认列值;(BEFORE INSERT) 以一个任意表达式产生的值初始化列; 书上有实现的SQLServer的示例 注意: 原则上并不限制一张表上定义的触发器的数量; 由于触发器是自动执行的,为一张表建立了多个触发器,必然加大系统的开销。 如果触发器设计得不好,会带来不可预知的后果。 触发器常常用于维护复杂的完整性约束,不用于业务处理。 凡是可以用一般约束限制的,就不要使用触发器。 如限制性别仅取男和女,可以使用检查约束CHECK实现。 用户的业务处理常常使用存储过程实现。 一张表可以有多个触发器,不能有两个触发器同时具有相同的触发时间和事件。 [例3.92] 在StudentView1991中查询CS0701班同学的信息。 SELECT * FROM StudentView1991 WHERE classNo=CS0701 * * 系统首先进行有效性检查,判断视图StudentView1991是否存在,如果存在,则从系统的数据字典中取出该视图的定义; 将定义中的子查询与用户的查询结合起来,转换为基于表的查询: SELECT * FROM Student WHERE year(birthday)=1991 AND classNo=CS0701 然后系统执行修正后的查询。 * * 1.4 更新视图 更新视图指通过视图来插入、删除和修改基本表中的数据。 视图不实际存放数据,对视图的更新,最终要转换为对基本表的更新。 对视图进行更新操作,其限制条件比较多 建立视图的作用不是利用视图来更新数据库中的数据,而是简化用户的查询; 达到一定程度的安全性保护; * * 如果视图包含下述结构中的任何一种,那么它就是不可更新的: (1)聚合函数;? (2)DISTINCT关键字;? (3)

文档评论(0)

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

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

1亿VIP精品文档

相关文档