触发器触发器的作用
触发器的作用 时间:2021-04-05 阅读:(
)
第3期收稿日期:2012-06-09*基金项目:安徽省教育厅教科研课题(项目编号:JG10101);亳州师专教科研课题(项目编号:BSJKY0917);亳州师专教学研究项目(项目编号:BZSZJYXM201112).
作者简介:耿涛(1981-),男,安徽蒙城人,硕士,研究方向:数据库技术.
引言数据库技术是计算机科学的一个非常重要的分支.
目前,数据库管理系统已从专用的应用程序发展为通用的软件平台,应用范围也越来越广.
数据的完整性和安全性是数据库应用软件开发过程中要考虑的一个非常重要的问题,利用触发器可以实现比约束更严格更灵活的规则定义,在SQLServer2005数据库服务器中合理地应用触发器可以提高数据的安全性,并且缩短前台应用程序的开发周期.
1触发器的基本概念1.
1触发器的定义触发器就是一种特殊的存储过程,它是在系统执行某些特定的T-SQL语句时自动执行的.
当数据表发生了Insert、Update或者Delete操作时触发器会被激活并自动执行.
在SQLServer2005中,当用户对数据库(表)进行Create、Alter和Drop操作时,系统也会激活相应的触发器.
1.
2触发器的作用在数据库设计过程中,如何保证数据库中数据的有效性和完整性是一个非常重要的问题.
保证数据的有效性和完整性的两种常用方法是约束(Check)和触发器(Trigger).
约束是直接设置在表内部的,只能实现一些比较简单的功能,比如字段的有效性和唯一性的检查、默认值的自动填入、表与表之间参照完整性的设置等;而触发器可以实现较为严格的、复杂的、由主键和外键不能保证的完整性和有效性的控制.
触发器的功能主要有以下几点:(1)跟踪数据变化.
监视数据库内数据的变化,禁止一些数据库不允许的操作,使数据库的操作更安全;(2)级联和并行运行.
可以监测到数据表中数据的变化,并自动地级联更新整个数据库中的各项内容,从而保证数据的一致性;(3)返回用户自定义的提醒信息.
当用户执行了某些操作时,可以向前台应用程序返回一个更加友好的提醒信息,使程序更加人性化;(4)保护数据库(表).
触发器可以撤销用户对数据库(表)的Drop和Alter操作,从而实现对数据的保护,保证了数据库的安全性.
1.
3触发器的类型在SQLServer2005中,触发器可以分为DML触发器和DDL触发器两种.
(1)DML触发器DML触发器是在数据库服务器中发生数据操纵语言(DataManipulationLanguage)事件时触发的,比如,在指定的表或视图中执行Insert、Update、Delete操作时就会触发.
数据库系统将DML触发器和触发它的语句作为可在触发器内部回滚的单个事务来处理,如果检测到错误,整个事务就会自动回滚.
根据触发器事件类型的不同,可以将DML触发器分为Insert触发器、Update触发器和Delete触发器三种,分别在数据库中执行Insert、Update和Delete操作时触发.
根据触发事件的操作时间,可以将DML触发器分为After触发器和Insteadof触发器.
After触发器是在对数据表的操作完成之后才被触发执行.
Insteadof触发器是在对数据表的操作之前被触发的,它没有执行原来SQL语句中的操作(比如Insert、Update、Delete),而是执行了触发器本身所定义的操作.
(2)DDL触发器DDL触发器是在响应数据定义语言(DataSQLServer2005触发器在图书管理系统中的应用研究*耿涛,黄磊,刘儒香(亳州师范高等专科学校,安徽亳州236800)【摘要】触发器是一种特殊的存储过程,系统会在执行某些特定的T-SQL语句时自动执行在触发器内部定义的SQL语句,从而保证了数据的安全性和完整性.
在图书管理系统后台数据库中定义合适的触发器,可以提高图书数据库的安全性,减轻前台管理系统的运行负担.
【关键词】触发器;图书管理系统;数据完整性【中图分类号】TP311.
138【文献标识码】A【文章编号】1673-1891(2012)03-0069-03西昌学院学报·自然科学版JournalofXichangCollege·NaturalScienceEdition第26卷第3期2012年09月Vol.
26,NO.
3Sep.
,2012西昌学院学报·自然科学版第26卷DefinitionLanguage)时被触发的,一般用于执行数据库中的管理任务,比如审核和规范数据库操作、防止数据表结构被修改等.
DDL触发器不会为响应对表或视图的Update、Insert、Delete语句而触发,而是在系统针对数据库或数据库对象执行Create、Alter、Drop等操作时被触发的.
1.
4触发器的原理SQLServer为每个DML触发器定义了两个特殊的虚拟表Inserted和Deleted,这两个表建立在数据库服务器的内存中,对于用户来说是只读的,不能对其进行修改和删除.
当触发器的任务完成之后,这两个表也会从内存中删除.
当用户执行Insert操作时,Inserted表中存储的是最近一次插入的数据;当用户执行Delete操作时,Deleted表中存储是被删除的数据;当用户执行Update操作时,Deleted表中存储的是更新前的原数据,Inserted表中存储的是更新后的新数据.
有了Inserted和Deleted这两个表,系统可以在遇到错误时轻松地把数据库回滚到错误操作前的正确状态.
对于After触发器,SQLServer先执行用户对数据表的操作,在用户的操作完成之后才被触发,执行触发器内部定义的SQL语句.
对于Insteadof触发器,在用户的操作之前就执行了其内部定义的SQL语句,并且根据触发器内部SQL语句执行的结果决定是否执行用户原本对数据的操作.
2触发器在图书管理系统中的应用下面以图书管理系统中最主要四个数据表学生表Student、班级表Class、图书表Book、借阅记录表Browrecord为基础,探讨触发器在图书管理系统中的应用.
创建这四个数据表的T-SQL语句如下:(1)createtablestudent(stuidchar(10),stunamevarchar(10),stusexchar(2),classidchar(10))(2)createtableclass(classidchar(10),classnamevarchar(30),specialityidchar(5))(3)createtablebook(bkidchar(10),bknamevarchar(40),wordnumint,publishervarchar(50),pubdatedatetime,pricenumeric(6,1),authorvarchar(50),stockqtyint)(4)createtablebrowrecord(bkidchar(10),stuidchar(10),borrowtimedatetime,returntimedatetime,remarkvarchar(50))2.
1创建一个触发器,当向学生表Student中插入新的记录时,显示信息"又添加了一位新同学".
createtriggertri_ins_stuonstudentafterinsertasbeginprint'又添加了一位新同学!
'end2.
2创建一个触发器,当修改了班级表Class中的班级号classid时,利用触发器自动级联修改学生表Student中的班级号classid.
createtriggertri_upd_classonclassforupdateasdeclare@oldclassidchar(10),@newclassidchar(10)select@oldclassid=Deleted.
classid,@newclassid=Inserted.
classidfromInserted,DeletedwhereInserted.
classname=Deleted.
classnameupdatestudentsetclassid=@newclassidwhereclassid=@oldclassid2.
3创建一个触发器,在向借阅记录表Browrecord中插入学生借书信息时,自动修改图书表Book中图书的库存数量stockqty.
createtriggertri_ins_browrecordonbrowrecordafterinsertasupdatebooksetstockqty=stockqty-1wherebook.
bkidin(selectbkidfrominserted)2.
4创建一个触发器,在借阅记录表Browrecord中,对于没有还书(returntime为NULL)的记录,只能修改还书时间returntime和备注remark的属性值;已经还书的记录,则不能修改任何属性值,以此来保护借阅记录表的安全性.
createtriggertri_upd_recordonbrowrecordforupdateasdeclare@returntimeasdatetime,@remarkasvarchar(50)select@returntime=returntime,@remark=remarkfromdeletedif@returntimeisnotnull··70第3期print'你不能修改已经完成的借阅记录!
'elseifnot(update(returntime)orupdate(remark))beginprint'你不能修改还书时间和备注以外的信息!
'rollbackend2.
5创建一个触发器,在删除学生表信息时先判断在借阅记录表Browrecord中有没有该生借书未还的记录,如果有则不能删除,否则可以删除.
createtriggertri_del_studentonstudentinsteadofdeleteasbeginifexists(select*frombrowrecordwherestuidin(selectstuidfromdeleted)andreturntimeisNULL)print'该生借书未还记录,不能删除其信息!
'elsedeletefromstudentwherestuidin(selectdistinctstuidfromdeleted)end3结语在数据库系统的开发中,恰当合理地运用触发器,可以实现一些较为复杂的业务规则的定义,从而轻松实现了数据库中数据的安全性,也大大提高了数据库应用软件的开发效率.
注释及参考文献:[1]王珊,萨师煊.
数据库系统概论[M].
北京:高等教育出版社,2008:160-163.
[2]黄存东.
数据库原理及应用(SQLServer2005)[M].
北京:中国水利水电出版社,2011:199-210.
[3]邵莉,李清茂.
触发器技术在教学管理系统中的应用[J].
内江师范学院学报,2008,23(8):39-41.
[4]刘晓平.
触发器在数据库中的应用[J].
韶关学院学报(自然科学版),2007,28(3):35-38.
TheApplicationResearchofSQLServer2005TriggerintheLibraryManagementSystemGENGTao,HUANGLei,LIURu-xiang(BozhouTeachersCollege,Bozhou,Anhui236800)Abstract:Thetriggerisaspecialkindofstoringprocedure.
ThesystemwillautomaticallyperformcertainSQLstatementsdefinedinsidethetriggerwhencarryingoutsomeparticularT-SQLstatements,thusensuringdatasecurityandintegrity.
Theappropriatedefinitionofthetriggerhelpstoimprovethesecurityofthebookdatabaseandalleviatetherunningburdenofthelibrarymanagementsystem.
Keywords:Trigger;Thelibrarymanagementsystem;Dataintegrity耿涛等:SQLServer2005触发器在图书管理系统中的应用研究··71
DogYun(中文名称狗云)新上了一批韩国自动化上架独立服务器,使用月减200元优惠码后仅需每月300元,双E5 CPU,SSD+NVMe高性能硬盘,支持安装Linux或者Windows操作系统,下单自动化上架。这是一家成立于2019年的国人主机商,提供VPS和独立服务器租用等产品,数据中心包括中国香港、美国洛杉矶、日本、韩国、德国、荷兰等。下面分享这款自动化上架韩国独立服务器的配置和优惠码信息。...
轻云互联成立于2018年的国人商家,广州轻云互联网络科技有限公司旗下品牌,主要从事VPS、虚拟主机等云计算产品业务,适合建站、新手上车的值得选择,香港三网直连(电信CN2GIA联通移动CN2直连);美国圣何塞(回程三网CN2GIA)线路,所有产品均采用KVM虚拟技术架构,高效售后保障,稳定多年,高性能可用,网络优质,为您的业务保驾护航。官方网站:点击进入广州轻云网络科技有限公司活动规则:用户购买任...
Dynadot 是一家非常靠谱的域名注册商家,老唐也从来不会掩饰对其的喜爱,目前我个人大部分域名都在 Dynadot,还有一小部分在 NameCheap 和腾讯云。本文分享一下 Dynadot 最新域名优惠码,包括 .COM,.NET 等主流后缀的优惠码,以及一些新顶级后缀的优惠。对于域名优惠,NameCheap 的新后缀促销比较多,而 Dynadot 则是对于主流后缀的促销比较多,所以可以各取所...
触发器的作用为你推荐
johncusack有喜欢演员JOHN CUSACK的吗?从哪部片子开始喜欢他的?至今为止他主要参与的电影作品有哪些?硬盘的工作原理简述下硬盘的工作原理?微信回应封杀钉钉微信发过来的钉钉链接打不开?access数据库ACCESS数据库和SQL有什么区别?蒋存祺蒋存祺的主要事迹巫正刚阿迪三叶草彩虹板鞋的鞋带怎么穿?详细点,最后有图解。高分求百度关键词工具如何利用百度关键词推荐工具选取关键词www.kk4kk.com猪猪影院www.mlzz.com 最新电影收费吗?m88.comwww.m88.com现在的官方网址是哪个啊 ?www.m88.com怎么样?www.toutoulu.com安装好派克滤芯后要检查其是否漏气
查域名 解析域名 域名备案批量查询 注册cn域名 securitycenter buyvm 12306抢票攻略 ixwebhosting godaddy优惠券 一元域名 权嘉云 七夕快乐英文 泉州电信 免费全能主机 卡巴斯基免费试用 免费dns解析 33456 多线空间 腾讯总部在哪 全能空间 更多