触发器触发器的作用

触发器的作用  时间: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

Megalayer促销:美国圣何塞CN2线路VPS月付48元起/香港VPS月付59元起/香港E3独服月付499元起

Megalayer是新晋崛起的国外服务器商,成立于2019年,一直都处于稳定发展的状态,机房目前有美国机房,香港机房,菲律宾机房。其中圣何塞包括CN2或者国际线路,Megalayer商家提供了一些VPS特价套餐,譬如15M带宽CN2线路主机最低每月48元起,基于KVM架构,支持windows或者Linux操作系统。。Megalayer技术团队行业经验丰富,分别来自于蓝汛、IBM等知名企业。Mega...

国内云服务器 1核 2G 2M 15元/月 萤光云

标题【萤光云双十二 全场6折 15元/月 续费同价】今天站长给大家推荐一家国内云厂商的双十二活动。萤光云总部位于福建福州,其成立于2002 年。主打高防云服务器产品,主要提供福州、北京、上海 BGP 和香港 CN2 节点。萤光云的高防云服务器自带 50G 防御,适合高防建站、游戏高防等业务。这家厂商本次双十二算是性价比很高了。全线产品6折,上海 BGP 云服务器折扣更大 5.5 折(测试了一下是金...

vpsdime:夏日促销活动,美国达拉斯VPS,2G内存/2核/20gSSD/1T流量,$20/年

vpsdime怎么样?vpsdime是2013年注册的国外VPS主机商,实际上他还有一系列的其他域名站点如Winity.io, Backupsy,Cloudive, Virtora等等,母公司“Nodisto IT”相对来说还是很靠谱了的商家。VPSDime主要提供各种高配低价VPS套餐,其中Linux VPS和存储VPS基于OpenVZ架构,高级VPS基于KVM。VPSDime在上个季度的Low...

触发器的作用为你推荐
网红名字被抢注球星名字被抢注合法合理吗?firetrap我淘宝店还是卖二单就被删,怎么回事!原代码求数字代码大全?原代码源代码是什么rawtools相机中的RAW是什么意思?javmoo.comjavbus上不去.怎么办qq530.com求教:如何下载http://www.qq530.com/ 上的音乐se95se.com现在400se就是进不去呢?进WWW怎么400se总cOM打开一半,?求解4400av.com在www.dadady.com 达达电影看片子很快的啊lcoc.toptop weenie 是什么?
什么是虚拟主机 成都主机租用 花生壳域名贝锐 中国万网域名 企业主机 美国翻墙 国内永久免费云服务器 韩国名字大全 重庆双线服务器托管 东莞服务器 架设邮件服务器 中国域名 双线空间 国外网页代理 cdn服务 新疆服务器 上海联通 register.com 饭桶 ssd 更多