触发器触发器的作用
触发器的作用 时间: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
官方网站:点击访问特网云官网活动方案:===========================香港云限时购==============================支持Linux和Windows操作系统,配置都是可以自选的,非常的灵活,宽带充足新老客户活动期间新购活动款产品都可以享受续费折扣(只限在活动期间购买活动款产品才可享受续费折扣 优惠码:AADE01),购买折扣与续费折扣不叠加,都是在原价...
六一云互联六一云互联为西安六一网络科技有限公司的旗下产品。是一个正规持有IDC/ISP/CDN的国内公司,成立于2018年,主要销售海外高防高速大带宽云服务器/CDN,并以高质量.稳定性.售后相应快.支持退款等特点受很多用户的支持!近期公司也推出了很多给力的抽奖和折扣活动如:新用户免费抽奖,最大可获得500元,湖北新购六折续费八折折上折,全场八折等等最新活动:1.湖北100G高防:新购六折续费八折...
UCloud优刻得商家这几年应该已经被我们不少的个人站长用户认知,且确实在当下阿里云、腾讯云服务商不断的只促销服务于新用户活动,给我们很多老用户折扣的空间不多。于是,我们可以通过拓展选择其他同类服务商享受新人的福利,这里其中之一就选择UCloud商家。UCloud服务商2020年创业板上市的,实际上很早就有认识到,那时候价格高的离谱,谁让他们只服务有钱的企业用户呢。这里希望融入到我们大众消费者,你...
触发器的作用为你推荐
嘉兴商标注册我在濮院想注册一个羊毛衫商标?该怎么做?18comic.fun有什么好玩的网站地陷裂口地陷前期会有什么征兆吗?原代码源代码是什么意思啊杰景新特萨克斯吉普特500是台湾原产的吗同ip站点查询如何查看几个站是不是同IPporndao单词prondao的汉语是什么www.119mm.com看电影上什么网站??www.55125.cn如何登录www.jbjy.cnyinrentangzimotang氨基酸洗发水的功效咋样?
江西服务器租用 视频空间租用 美国vps hostigation 西安服务器 256m内存 私人服务器 debian源 美国十次啦服务器 共享主机 phpmyadmin配置 息壤代理 免费phpmysql空间 免费mysql数据库 starry 畅行云 lamp兄弟连 免费个人主页 lamp的音标 锐速 更多