存储过程与触发器.ppt
- 文档编号:1425200
- 上传时间:2022-10-22
- 格式:PPT
- 页数:20
- 大小:93KB
存储过程与触发器.ppt
《存储过程与触发器.ppt》由会员分享,可在线阅读,更多相关《存储过程与触发器.ppt(20页珍藏版)》请在冰豆网上搜索。
存储过程与触发器,补充内容,存储过程与触发器概述,在大型数据库系统中,存储过程和触发器具有很重要的作用。
无论是存储过程还是触发器,都是SQL语句和流程控制语句的集合。
就本质而言,触发器也是一种存储过程。
存储过程在运算时生成执行方式,所以,以后对其再运行时其执行速度很快。
SQLServer2000不仅提供了用户自定义存储过程的功能,而且也提供了许多可作为工具使用的系统存储过程。
1.1存储过程的概念,存储过程(StoredProcedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。
用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
1.1存储过程的概念,在SQLServer的系列版本中存储过程分为两类:
系统提供的存储过程和用户自定义存储过程。
系统过程主要存储在master数据库中并以sp_为前缀,并且系统存储过程主要是从系统表中获取信息,从而为系统管理员管理SQLServer提供支持。
通过系统存储过程,MSSQLServer中的许多管理性或信息性的活动(如了解数据库对象、数据库信息)都可以被顺利有效地完成。
尽管这些系统存储过程被放在master数据库中,但是仍可以在其它数据库中对其进行调用,在调用时不必在存储过程名前加上数据库名。
而且当创建一个新数据库时,一些系统存储过程会在新数据库中被自动创建。
用户自定义存储过程是由用户创建并能完成某一特定功能(如查询用户所需数据信息)的存储过程。
在本次课中所涉及到的存储过程主要是指用户自定义存储过程。
举例:
sp_columns;sp_datatype_info,1.2存储过程的优点,当利用SQLServer创建一个应用程序时,SQL是一种主要的编程语言。
若运用SQL来进行编程,有两种方法。
其一是,在本地存储SQL程序,并创建应用程序向SQLServer发送命令来对结果进行处理。
其二是,可以把部分用SQL编写的程序作为存储过程存储在SQLServer中,并创建应用程序来调用存储过程,对数据结果进行处理存储过程能够通过接收参数向调用者返回结果集,结果集的格式由调用者确定;返回状态值给调用者,指明调用是成功或是失败;包括针对数据库的操作语句,并且可以在一个存储过程中调用另一存储过程。
1.2存储过程的优点,我们通常更偏爱于使用第二种方法,即在SQLServer中使用存储过程而不是在客户计算机上调用SQL编写的一段程序,原因在于存储过程具有以下优点:
(1)存储过程允许标准组件式编程存储过程在被创建以后可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。
而且数据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响(因为应用程序源代码只包含存储过程的调用语句),从而极大地提高了程序的可移植性。
1.2存储过程的优点,
(2)存储过程能够实现较快的执行速度如果某一操作包含大量的SQL代码或被多次执行,那么存储过程要比批处理的执行速度快很多。
因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的执行计划。
而批处理的SQL语句在每次运行时都要进行编译和优化,因此速度相对要慢一些。
1.2存储过程的优点,(3)存储过程能够减少网络流量对于同一个针对数据数据库对象的操作(如查询、修改),如果这一操作所涉及到的SQL语句被组织成一存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,否则将是多条SQL语句,从而大大增加了网络流量,降低网络负载。
1.2存储过程的优点,(4)存储过程可被作为一种安全机制来充分利用系统管理员通过对执行某一存储过程的权限进行限制,从而能够实现对相应的数据访问权限的限制,避免非授权用户对数据的访问,保证数据的安全。
注意:
存储过程虽然既有参数又有返回值,但是它与函数不同。
存储过程的返回值只是指明执行是否成功,并且它不能像函数那样被直接调用,也就是在调用存储过程时,在存储过程名字前一定要有EXEC保留字,存储过程几种写法,1)创建使用参数的存储过程CreateProcau_infolastnamevarchar(40),firstnamevarchar(20)AsSelectau_lname,au_fname,title,pub_nameFrom.whereau_fname=firstnameAndau_lname=lastnameGoEXECUTEau_inforinger,anne,createprocedures_querynamevarchar(255)asselectsno,sn,agefromswheresn=namegoexecs_query李涛,存储过程几种写法,2)创建使用参数默认值的存储过程,该存储过程在没有输入参数的情况下将默认值得到的结果输出CreateProcau_infolastnamevarchar(40)=ringer,firstnamevarchar(20)=anneAsSelectau_lname,au_fname,title,pub_nameFrom.whereau_fname=firstnameAndau_lname=lastnameGoEXECUTEau_info,createprocedures_querynamevarchar(255)=李涛asselectsno,sn,agefromswheresn=namegoexecs_query,存储过程几种写法,3)用显式值替代参数默认值的存储过程CreateProcshowindtablevarchar(30)=titlesasSELECTTable_Name=sysobjects.name,INDEX_Name=sysindexes.name,index_id=indidfromsysindexesinnerjoinsysobjectsonsysobjects.id=sysindexes.idwheresysobjects.name=tableEXECUTEshowindauthors,createprocedures_querynamevarchar(255)=李涛asselectsno,sn,agefromswheresn=namegoexecs_query陈文,存储过程几种写法,4)使用参数默认值NULL来创建存储过程,在这种情况下如果没有提供参数值,SQL将不会出错显示CreateProcshowindtablevarchar(30)=NullasIFtableisNUllprint请输入参数elseSELECTTable_Name=sysobjects.name,INDEX_Name=sysindexes.name,index_id=indidfromsysindexsinnerjoinsysobjectsonsysobjects.id=sysindexes.idwheresysobjects.name=tableEXECUTEshowindauthors,createprocedures_query2namevarchar(255)=nullasIFnameisNUllprint请输入参数elseselectsno,sn,agefromswheresn=namegoexecs_query2,存储过程几种写法,5)使用包含通配符的参数默认值创建存储过程,通配符包括(%,_,和),注意需要用Like关键字CREATEPROCau_infolastnamevarchar(40)=r%,firstnamevarchar(20)=%ASSelectau_lname,au_fname,title,pub_namefromauthorsinnerjointitleauthoronauthors.au_id=titleauthor.au_idjointitlesontitleauthor.title_id=titles.title_idjoinpublishersontitles.pub_id=publishers.pub_idwhereau_fnamelikefirstnameandau_lnamelikelastnameGO,createprocedures_query3namevarchar(255)asselectsno,sn,agefromswheresnlikenamegoexecs_query3陈%,1.3触发器的概念,在SQL中,触发器是一种特殊类型的存储过程,它不同于SQL的存储过程。
触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。
当对某一表进行诸如UPDATE、INSERT、DELETE这些操作时,SQLServer就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合由这些SQL语句所定义的规则,触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。
它维护不同表中数据间关系的有关规则。
定义一个好的触发器对简化数据的管理,保证数据库的安全都有重要的影响。
触发器是针对表一级的,这就意味着,只有表的所有者有权创建表的触发器。
创建触发器的语法:
CreateTriggerowner.触发器名Onowner.表名Forinsert,update,deleteAsBeginSQL语句(块)End,举例,比如,有两个表Student:
学生表,学号为主键BorrowRecord:
借书记录表,学号为外码,用到的功能有:
1.如果更改了学生的学号,希望借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号);2.如果该学生已经毕业,希望删除学号的同时,也删除借书记录,这时候可以用到触发器。
对于1,创建一个Update触发器:
CreateTriggertruStudentOnStudent-在Student表中创建触发器forUpdate-为什么事件触发As-事件触发后所要做的事情ifUpdate(StudentID)beginUpdateBorrowRecordSetStudentID=i.StudentIDFromBorrowRecordbr,Deletedd,Insertedi-Deleted和Inserted临时表Wherebr.StudentID=d.StudentIDend,理解触发器里面的两个临时的表:
Deleted,Inserted。
注意Deleted与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录,对于2,创建一个Delete触发器CreatetriggertrdStudentOnStudentforDeleteAsDeleteBorrowRecordFromBorrowRecordbr,DeleteddWherebr.StudentID=d.StudentID,Createtriggertr_deleteOnSforDeleteAsDeletescFromsci,DeleteddWherei.sno=d.sno,deletefromswheresno=s7,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 存储 过程 触发器
![提示](https://static.bdocx.com/images/bang_tan.gif)