存储过程和触发器.ppt
《存储过程和触发器.ppt》由会员分享,可在线阅读,更多相关《存储过程和触发器.ppt(67页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、存储过程和触发器存储过程和触发器任务任务l掌握存储过程,触发器的概念和使用方法;掌握存储过程,触发器的概念和使用方法;l掌握运用掌握运用T-SQL编写基本的存储过程、触发器。(编写基本的存储过程、触发器。()l理解存储过程、触发器的用途;理解存储过程、触发器的用途;l进一步理解数据完整性的含义(进一步理解数据完整性的含义()l了解数据完整性的规则、默认值等使用。了解数据完整性的规则、默认值等使用。5.1 存储过程存储过程l5.1.1 存储过程的基本概念存储过程的基本概念l5.1.2 存储过程的优点存储过程的优点l5.1.3 存储过程的分类存储过程的分类l5.1.4 存储过程的使用方法存储过程的
2、使用方法5.1存储过程存储过程l传统的数据库结构传统的数据库结构l管理数据等共享资源,管理数据等共享资源,l所有的应用程序都在用户端,都与用户实际运行的应所有的应用程序都在用户端,都与用户实际运行的应用程序捆绑在一起;用程序捆绑在一起;l客户客户/服务器数据库服务器数据库l管理数据等共享资源管理数据等共享资源l承担一些应用逻辑,完成来自客户端的一些处理请求,承担一些应用逻辑,完成来自客户端的一些处理请求,在数据库中还可以存放程序,即存储过程。在数据库中还可以存放程序,即存储过程。5.1.1存储过程的基本概念存储过程的基本概念l是什么是什么:是事先编好的、存储在服务器端的数据:是事先编好的、存储
3、在服务器端的数据库中的程序库中的程序(预编译的(预编译的SQL集合),这些程序用集合),这些程序用来完成对数据库的指定操作。来完成对数据库的指定操作。l怎么使用怎么使用:这些程序可以由应用程序的调用启动,:这些程序可以由应用程序的调用启动,或由数据完整性规则和触发器调用。或由数据完整性规则和触发器调用。l怎么理解怎么理解:存储过程是用户可以简单地将其作为:存储过程是用户可以简单地将其作为一个函数来调用,无须重复执行存储过程的一个函数来调用,无须重复执行存储过程的SQL语句。它包含一组经常执行的、逻辑完整的语句。它包含一组经常执行的、逻辑完整的SQL语句。语句。5.1.2存储过程的优存储过程的优
4、点点l减轻程序编写的工作量减轻程序编写的工作量:可以在各个程序中反复调用定:可以在各个程序中反复调用定义好的存储过程。义好的存储过程。l存储过程能够实现较快的执行速度存储过程能够实现较快的执行速度:因为存储过程是预因为存储过程是预编译的,而批处理编译的,而批处理的的T-SQL语句在每次运行时都要进行语句在每次运行时都要进行编译和优化,因此速度相对要慢一些。编译和优化,因此速度相对要慢一些。l存储过程能够减少网络流量存储过程能够减少网络流量:对于同一个针对数据库对于同一个针对数据库对象的操作,所涉及到的对象的操作,所涉及到的T-SQL语句被组织成一存储过语句被组织成一存储过程,当在客户端调用该存
5、储过程时,程,当在客户端调用该存储过程时,网络中传送的只是网络中传送的只是该调用语句该调用语句,降低网络负载,降低网络负载。l存储过程增加安全机制:存储过程增加安全机制:系统管理员通过对执行某一存系统管理员通过对执行某一存储过程的权限进行限制,从而能够实现对相应的数据访储过程的权限进行限制,从而能够实现对相应的数据访问权限的限制,避免非授权用户对数据的访问,保证数问权限的限制,避免非授权用户对数据的访问,保证数据的安全。据的安全。客户端应用客户端应用(不使用存储过程)(不使用存储过程)客户端应用客户端应用(使用存储过程)(使用存储过程).Starttransaction.INSERTdataU
6、PDATEdataDELETEdataEndtransaction.Starttransaction.CallStoredprocedureEndtransaction.DBMSServerDBMSServerProcedure:INSERTdataUPDATEdataDELETEdata(a)(b)不使用存储不使用存储过程时,所有的过程时,所有的数据处理都在客数据处理都在客户端完成;而使户端完成;而使用存储过程时,用存储过程时,可以使数据处理可以使数据处理在服务器端完成。在服务器端完成。5.1.3 储存过程的分类储存过程的分类l系统存储过程系统存储过程lSQLServer本身提供了一些存储过
7、程,用于管理本身提供了一些存储过程,用于管理SQLServer和显示有关数据库和用户的信息,我们和显示有关数据库和用户的信息,我们称之为系统存储过程。系统存储过程都以称之为系统存储过程。系统存储过程都以“sp_”开开头,存储在头,存储在master数据库中。数据库中。l用户存储过程用户存储过程l用户也可以编写自己的存储过程,并把它存放在数用户也可以编写自己的存储过程,并把它存放在数据库中。这样安排的主要目的就是要充分发挥数据据库中。这样安排的主要目的就是要充分发挥数据库服务器的功能,尽量减少网络库服务器的功能,尽量减少网络上的堵塞。上的堵塞。5.1.4存储过程的使用方法存储过程的使用方法l创建
8、存储过程创建存储过程l执行存储过程执行存储过程l修改存储过程修改存储过程l删除存储过程删除存储过程创建存储过程创建存储过程CREATEPROCedureprocedure_name;number parameter data_type=default,ASsql_statements sprocedure_name:给出存储过程名;:给出存储过程名;s snumber:对同名的存储过程指定一个序号;:对同名的存储过程指定一个序号;s sparameter:给出参数名;:给出参数名;s sdata_type:指出参数的数据类型;:指出参数的数据类型;s s=default:给出参数的默认值;:给
9、出参数的默认值;s ssql_statement:存储过程所要执行的:存储过程所要执行的SQL语句,它可语句,它可以是一组以是一组SQL语句,可以包含流程控制语句等。语句,可以包含流程控制语句等。例:创建一个最简单的存储过程(无参数调用):例:创建一个最简单的存储过程(无参数调用):CREATEPROCeduresp_getemp;1ASSELECT*FROM职工说明:创建存储过程说明:创建存储过程sp_getemp;1,要求查询职工信息,要求查询职工信息例:带参数的存储过程:例:带参数的存储过程:CREATEPROCeduresp_getemp;2(salaryint)ASSELECT*FR
10、OM职工WHERE工资salary说明:创建存储过程说明:创建存储过程sp_getemp;2,要求查询工资值大,要求查询工资值大于给定值的职工信息于给定值的职工信息说明:说明:存储过程一般用来完成数据查询和数据处理操作,所以在存储过程中不可以使用创建数据库对象的语句,即在存储过程中一般不能含有以下语句:CREATETABLECREATEVIEWCREATEDEFAULTCREATERULECREATETRIGGERCREATEPROCEDURE执行存储过程执行存储过程EXECute=|例:执行带参数的例:执行带参数的sp_getemp;2存储过程存储过程Executesp_getemp;212
11、40说明:执行存储过程说明:执行存储过程sp_getemp;2,要求查询工资值大,要求查询工资值大于于1240元的职工信息元的职工信息存储过程的返回值和状态信息存储过程的返回值和状态信息无论什么时候执行存储过程,总要返回一个结果码,用以指示存储过程的执行状态。如果存储过程执行成功,返回的结果码是0;如果存储过程执行失败,返回的结果码一般是一个负数,它和失败的类型有关。我们在创建存储过程时,也可以定义自己的状态码和错误信息。常用的存储过程返回状态表常用的存储过程返回状态表0 过程成功执行1 对象丢失2 发生数据类型错误3 处理过程被死锁4 发生权限错误5 发生语法错误6 发生恶意用户错误7 发生
12、资源错误8 遭遇非致命的内部错误9 遭遇系统限制10 发生致命的内部不稳定性12 表或索引被破坏13 数据库被破坏14 发生硬盘错误通常用全局变量ERROR 返回最后执行的SQL 语句的错误代码。CREATEPROCeduresp_getemp;3(salaryint=NULL)ASIFsalaryISNULLBEGINPRINT必须提供一个数值作参数!RETURN13ENDIFNOTEXISTS(SELECT*FROM职工WHERE工资salary)BEGINPRINT没有满足条件的记录!RETURN-103ENDSELECT*FROM职工WHERE工资salaryRETURN0例:带参数和
13、返回状态值的存储过程。利用全局变量修改刚才的例子利用全局变量修改刚才的例子CREATEPROCeduresp_getemp;3(salaryint=NULL)ASSELECT*FROM职工WHERE工资salaryIFERROR=0RETURN0ELSERETURN-1例:执行以上存储过程。DECLAREstatusintEXECUTEstatus=sp_getemp;3salary 1200printstatus存储过程的修改和删除存储过程的修改和删除 l修改存储过程的语句是(一般格式):ALTERPROCedureprocedure_name;number parameter data_t
14、ype=default,ASsql_statementl删除存储过程的语句是:DROPPROCedureprocedure_name注意:删除存储过程的语句中不能指定序号。也就是说,该语句将同时删除同名的所有存储过程。小结:要用好存储过程小结:要用好存储过程存储过程是客户/服务器机制的一个重要组成部分,如果使用客户/服务器机制的数据库管理系统,但是不理解存储过程或没有充分利用存储过程,那将使客户/服务器机制的功能大打折扣,使系统的整体性能可能降低很多。5.2 触发器触发器l5.2.1 触发器的基本概念触发器的基本概念l5.2.2触发器的用途触发器的用途l5.2.3触发器与存储过程的比较触发器与
15、存储过程的比较l5.2.4触发器的使用方法触发器的使用方法5.2.1 触发器的基本概念触发器的基本概念l触发器可以看作是一类特殊的存储过程,它在满足某个特定条件时自动触发执行。l触发器是为表上的更新、插入、删除操作定义的,也就是说当表上发生更新、插入或删除操作时触发器将执行。l因此,相应的,触发器根据触发类型分为insert,delete,update触发器。5.2.2触发器的用途触发器的用途l触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。l除此之外,触发器还有以下的功能:l触发器可以通过级联的方式对相关的表进行修改。比如,对父表的修改,可以引起对子孙表
16、的一系列修改,从而保证数据的一致性和完整性。l触发器可以禁止或撤消违反参照完整性的修改。l触发器可以强制比用CHECK约束定义更加复杂的限制。5.2.3触发器与存储过程的比较触发器与存储过程的比较l联系:l1、触发器也是存储过程。l2、它们都是提高数据库服务器性能的工具。l 区别:l1、执行方法不同。触发器主要是通过事件进行触发而被执行的,存储过程可以通过存储过程名字而被直接调用。l2、建立方法不同。触发器是依附于表的数据库对象触发器是依附于表的数据库对象lCREATETRIGGER 语句必须是批处理的第一个语句语句必须是批处理的第一个语句l表的所有者具有创建触发器的缺省权限,表的所有者不能表
17、的所有者具有创建触发器的缺省权限,表的所有者不能把该权限传给其它用户。把该权限传给其它用户。l触发器是数据库对象,所以其命名必须符合命名规则。触发器是数据库对象,所以其命名必须符合命名规则。l尽管在触发器的尽管在触发器的SQL 语句中可以参照其它数据库中的对象,语句中可以参照其它数据库中的对象,但是触发器只能创建在当前数据库中。但是触发器只能创建在当前数据库中。l虽然触发器可以参照视图或临时表,但不能在视图或临时虽然触发器可以参照视图或临时表,但不能在视图或临时表上创建触发器,而只能在基表或在创建视图的表上创建表上创建触发器,而只能在基表或在创建视图的表上创建触发器。触发器。l一个触发器只能对
18、应一个表,这是由触发器的机制决定的一个触发器只能对应一个表,这是由触发器的机制决定的。触发器是依附于表的数据库对象触发器是依附于表的数据库对象l一个触发器和三部分内容有关:一个触发器和三部分内容有关:l定义触发器的表定义触发器的表l激活触发器的数据操作语句激活触发器的数据操作语句l触发器要采取的动作触发器要采取的动作不能在触发器中使用的不能在触发器中使用的sql语句语句lCreate database和create tablel所有drop语句l数据库修改语句alter table,alter databasel对象权限语句grant和revoke5.2.4 触发器的使用方法触发器的使用方法l
19、创建触发器的语句l触发器的使用原理-理解两个视图并掌握它们的使用l插入类触发器l删除类触发器l更新类触发器l触发器的相关操作l修改删除触发器建立触发器的语句建立触发器的语句CREATETRIGGERtrigger_nameONtableFORINSERT|UPDATE|DELETEASIFUPDATE(column)AND|ORUPDATE(column)sql_statementstrigger_name:给出了触发器的名称;stable:说明了定义触发器的表或视图;sFORINSERT|UPDATE|DELETE:说明了激活触发器的数据操作语句;sIFUPDATE(column):对应于U
20、PDATE类触发器,说明如果更新某(些)列则做如何处理;ssql_statement:触发器所要执行的SQL语句,它可以是一组SQL语句,可以包含流程控制语句等。例:建立一个简单的触发器。例:建立一个简单的触发器。CREATETRIGGERwh_triggerON仓库FORINSERTASPRINT插入了一个仓库元组说明:当在说明:当在“仓库仓库”表中插入一行元组,则输出表中插入一行元组,则输出“插入了一个仓库元组插入了一个仓库元组”。触发器的原理触发器的原理 两个特殊的视图两个特殊的视图l每个触发器有两个特殊的视图:每个触发器有两个特殊的视图:插入视图插入视图(inserted)和删除视图(
21、)和删除视图(deleted)。l它们是逻辑表且是由系统管理的,存储在内存中,不允许用它们是逻辑表且是由系统管理的,存储在内存中,不允许用户直接对其修改,结构与原表有相同的表结构。户直接对其修改,结构与原表有相同的表结构。l当触发器工作完成,这两个视图也被删除。当触发器工作完成,这两个视图也被删除。l它们主要保存因用户操作(存放刚插入的新记录和存放刚删它们主要保存因用户操作(存放刚插入的新记录和存放刚删除的旧记录)而被影响到的原数据值或新数据值。除的旧记录)而被影响到的原数据值或新数据值。l它们是只读的,即用户不能向这两个表写入内容它们是只读的,即用户不能向这两个表写入内容,但可以引用但可以引
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 存储 过程 触发器
限制150内