浅谈SQL Server触发器之使用

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:sqs1989
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:在SQL Server数据库中为了对数据库表实施复杂的完整性约束,触发器是比较理想的选择工具。它可以对数据库表进行级联修改,保持数据的一致性。它的执行是由事件来触发,当对一个表进行插入、更新、删除操作时就会激活它执行,从而通过触发器的执行更好地實现数据的完整性约束和业务规则等。
  关键词:SQL Serve;数据库;触发器;工作过程;维护
  中图分类号:TP313 文献标识码:A 文章编号:1009-3044(2014)32-7582-03
  Abstract: In the SQL Server database to form the integrity constraints on the database to implement complex, the trigger is ideal selection tool. It can be cascaded to modify the database table, the maintenance of data consistency. It is implemented by the event to trigger, when on a table to insert, update, delete operations will activate it execution, thus through the execution of triggers to better achieve the integrity constraints andbusiness rules, data etc..
  Key words: SQL Serve; database; triggers; work process; maintain
  在数据库管理系统中,常常会进行数据的插入、更新、删除等操作,在此操作过程中保持数据的完整性是非常重要的一项工作。当一些普通的维护方法不能满足要求时我们就要考虑用到触发器了。
  1 触发器的特点
  触发器是一种特殊的存储过程,其特殊性在于它并不需要由用户来直接调用,而是在对表或视图进行插入记录、更改记录或者删除记录时自动执行的。
  2 触发器的使用场合
  实现对相关表的级联修改;拒绝或回滚违反引用完整性的操作;完成比CHECK约束更复杂的限制;检查修改前后表中数据的不同并执行相应的操作。
  3 触发器3种操作的实现过程
  DML触发器在执行过程中可以使用两个特殊的临时表—deleted表和inserted表。这两个表存储于内存中,它们在结构上与触发器所在的表的结构相同。
  deleted表用于存储delete、update语句所影响的行的副本。在执行delete或update语句时,数据行从触发器表中删除,并传输到deleted表中。
  inserted表用于存储insert、update语句所影响的行的副本,在一个插入或更新事务处理中,新建行被同时添加到更新操作的表和insered表中。insered表中的行是触发器表中新行的副本。
  两个表由系统管理,不允许用户直接对其进行修改,但可以访问。触发器工作完成后,与该触发器相关的这两个表也将被删除。
  现通过实例说明触发器的妙用之处:studentinfo数据库包括学生表student(学号SNO,姓名SNAME,系名DEPART,性别SEX,出生日期DDATE)、课程表Course(课程编号CNO,课程名称CNAME)和成绩表score(学号SNO,课程编号CNO,成绩GRADE)
  3.1 Insert触发器的工作过程
  Insert触发器是当用INSERT语句向表中插入数据时都会执行的触发器。
  当触发INSERT触发器时,新的数据行就会被插入到触发器表和inserted表中。inserted表是一个逻辑表,它包含了已经插入的数据行的一个副本。inserted表包含了INSERT语句中已记录的插入动作。inserted表还允许引用由初始化INSERT语句而产生的日志数据。
  例如:创建一个触发器。当向student表中插入一条学生记录时引发该触发器,向scores表中插入两行数据。
  Use studentinfo
  Go
  Create trigger insert_score_trigger
  On student
  For insert as
  Set nocount off
  Declare @st_no int
  Select @stno=学号 from inserted
  Insert into score(sno,cno) Values (@st_no,1)
  Insert into score(sno,cno) Values (@st_no,2)
  Go
  Insert into student(sno,sname,depart,sex,ddate)
  Values(‘2012001’,’王平’,’计算机科学技术’,’男’,’1993-3-9’)
  Select score.sno as 学号,sname as 姓名,course as 课程,score as 成绩
  From score as sc inner join student as s on s.sno=sc.sno
  Inner join course as c on sc.cno=c.cno   Where sname=’王平’
  go
  3.2 DELETE触发器的工作过程
  deleted表是一个逻辑表,它存放已被删除数据行的一个副本。當触发delete触发器后,从受影响的表中删除的行将被放置到该特殊的表中。
  例如:在student表上创建一个触发器trigger_delete,当删除student表中某个同学的记录信息时,score表中与该同学相关的成绩信息也自动被删除。
  Use Studentinfo
  Go
  if exists (select name from sysobjects
  where name=’ trigger_delete’ and type=’tr’)
  drop trigger trigger_delete
  go
  create trigger trigger_delete
  on student
  for delete
  as
  delete score
  where sno=(select sno from deleted)
  go
  3.3 UPDATE触发器的工作过程
  可将UPDATE语句看成两步操作:即捕获数据前像的DELETE语句,和捕获数据后像的INSERT语句。当在定义有触发器的表上执行UPDATE语句时,原始行(前像)被移入到deleted表,更新行(后像)被移入到inserted表。
  例如:在course表上创建一个触发器trigger_update,当更新course表中某门课程的记录信息时,score表中与该课程相关的信息也自动被更新。
  Use Studentinfo
  go
  if exists (select name from sysobjects
  where name=’trigger_update’ and type=’tr’)
  drop trigger trigger_update
  go
  create trigger trigger_update
  on course
  for update
  as
  update score
  set cno=
  (select cno from inserted)
  where cno=(select cno from deleted)
  go
  4 过多的使用触发器会给数据库及应用程序的维护带来困难
  SQL server触发器虽然可以用来保障数据的完整性,但我们要有选择的使用才行,一般情况下,较为简单的完整性要求,我们通过规则、约束、默认值就可以解决了,就没有必要使用触发器了。而且两者在运行机制上也是有区别的,规则、约束、默认值这些是在数据更改之前进行数据验证,而触发器是在数据更改之后才进行验证的。
  如果我们对触发器过分的依赖,就会造成遍地是程序的情况,因为触发器本身就需要别的程序给它一个触发条件,也就是说至少在两个地方存在着程序,必然影响数据库的结构。
  5 结束语
  总之,触发器的使用很方便,在保持数据的完整性操作方面比约束、规则等具有更加高效的功能,而且也比较简单。重要的是理解insert、delete、update实现原理及工作过程。虽然触发器功能强大,能够轻松可靠地实现许多复杂的功能,但要慎用。只有合理的使用触发器才会给我们的数据库操作工作带来很大的便利。
  参考文献:
  [1] 杨得鑫.SQL server 2005开发与应用[M].北京:机械工业出版社.2008.
  [2] 李红.数据库原理与应用[M].北京:高等教育出版社.2011.
  [3] 李昆.SQL SERVER2005课程设计案例精编[M].北京:中国水利水电出版社,2010.
  [4] 何文华.SQL Server 2005应用开发教程[M].北京:电子工业出版社,2010.
其他文献
焦虑作为学习者情感因素的一个非常重要的情感变量,近来成为外语教学研究的学术热点,同时焦虑对语言的听、说、读、写等分项技能的影响也不尽相同。本文分析了外语口语焦虑的成
协同图形编辑是协同设计的一个重要研究方向,支持自然和谐的多用户并发交互是协同图形编辑的重点内容之一。对协同图形编辑系统的进行了设计,提出了相应的解决方案和技术措施。最后在Socket的基础上,给出一个协同图形编辑系统实例的初步探索。
随着互联网信息技术的不断发展,我国越来越重视互联网的建设,同时线上购物市场也在普及和发展,目前淘宝已经深入到农村地区,但是就目前而言,农村淘宝的发展还不是很完善,因此
人脸识别的应用范围越来越广,而在实际生活中采集到的人脸往往具有多种姿态变化,不同姿态下的人脸识别在计算机领域是一个富有挑战的问题。人脸识别的主要研究方向在于对人脸特征的选取,其好坏直接影响到实际应用。文章将介绍基于深度学习的FIP特征学习方法,用于实现正脸重构进而解决人脸姿态出现巨大变化时的识别问题,并基于MULTIPIE人脸数据库进行一系列实验,验证正脸重构的可靠性。
以“航空航天电子的未来”为主题由上海、北京、陕西、辽宁、贵州、江西、江苏、浙江和广西等省市航空航天学会联办的2005上海航空航天电子设备国际展览会暨航空航天电子论坛
介绍了美国航空无线电公司规范ARINC429和与其相对应的俄罗斯军用标准ΓOCT18977和PTM指导性技术资料PTM 1495的基本内容;并在对这两套标准进行比较的基础上,提出了一套利用
随着城市地铁建设的快速发展,地铁与临近建筑物之间的相互影响日益受到关注.采用有限元计算软件,对重庆双薪时代商业楼与歇台子地铁站及2号出口之间的相互影响进行分析.计算
首先描述飞机信息传输系统(AITS)应具有的功能;然后叙述构成AITS的机载信息分系统、信息传输分系统和地面管理分系统;最后,给出了基于小波变换编码的图像压缩/解压的图像处理
双绞线是局域网中用得很广泛的一种传输介质,虽然它看起来很不起眼,但是在制作环节、水晶头压制环节甚至走线环节,都有可能造成网络访问不正常,例如物理连接不稳定、网络传输
实时交换机可为用户提供微秒级硬实时通信性能,在航空航天领域具有广阔的应用前景.本文提出采用硬件优先级队列来实现FC实时交换机,以支持航电统一网络的硬实时通信.标准的FC