第06章 存储过程、触发器和数据性.ppt
《第06章 存储过程、触发器和数据性.ppt》由会员分享,可在线阅读,更多相关《第06章 存储过程、触发器和数据性.ppt(50页珍藏版)》请在沃文网上搜索。
1、 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系北京市高等教育精品教材立项项目北京市高等教育精品教材立项项目数据库系统及应用1合肥学院电子系合肥学院电子系第六章 存储过程、触发器和数据完整性 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系学习内容 存储过程存储过程 触发器触发器 数据完整性数据完整性3合肥学院电子系合肥学院电子系存储过程 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系定义客户客户/服务器数据库与传统的数据库结构的一个很重要服务器数据库与传统的数据库结构的一个很重要的区别是,在传统的数据库中
2、只存放数据,所有的应用程序的区别是,在传统的数据库中只存放数据,所有的应用程序都在用户端,都与用户实际运行的应用程序捆绑在一起;而都在用户端,都与用户实际运行的应用程序捆绑在一起;而在客户在客户/服务器结构的数据库中,服务器结构的数据库中,在数据库中还可以存放程在数据库中还可以存放程序序,即,即存储过程存储过程。存储过程存储过程是事先编好的、存储在数据库中的程序,这些是事先编好的、存储在数据库中的程序,这些程序用来完成对数据库的指定操作。程序用来完成对数据库的指定操作。5 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系概念存储过程存储过程是一种数据库对象,独立存储
3、在数据是一种数据库对象,独立存储在数据库内。存储过程可以接受库内。存储过程可以接受输入参数输入参数、输出参数输出参数,返返回单个或多个结果集以及返回值回单个或多个结果集以及返回值,由应用程序通过,由应用程序通过调用执行。调用执行。存储过程是存储过程是独立存在于表之外的数据对象独立存在于表之外的数据对象。可。可以由客户调用,也可以从另一个过程或触发器调用,以由客户调用,也可以从另一个过程或触发器调用,参数可以被传递和返回,出错代码也可以被检验。参数可以被传递和返回,出错代码也可以被检验。6 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系优点预编译预编译:存储过程预先
4、编译好放在数据库内,减少编译语句存储过程预先编译好放在数据库内,减少编译语句所花的时间。所花的时间。缓存缓存:编译好的存储过程会进入缓存,所以对于经常执行的编译好的存储过程会进入缓存,所以对于经常执行的存储过程,除了第一次执行外,其他次执行的速度会有明存储过程,除了第一次执行外,其他次执行的速度会有明显提高。显提高。减少网络传输减少网络传输:特别对于处理一些数据的存储过程,不必像特别对于处理一些数据的存储过程,不必像直接用直接用T-SQLT-SQL语句实现那样多次传送数据到客户端。语句实现那样多次传送数据到客户端。更好的利用服务器内存更好的利用服务器内存:特别对于处理中间数据量不大的情特别对于
5、处理中间数据量不大的情况,存储过程中可以利用存放在内存的表变量。况,存储过程中可以利用存放在内存的表变量。7 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系存储过程的类型1.1.系统存储过程系统存储过程2.2.本地存储过程本地存储过程3.3.临时存储过程临时存储过程8 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系系统存储过程SQL ServerSQL Server本身提供了一些存储过程,用于管本身提供了一些存储过程,用于管理理SQL ServerSQL Server和显示有关数据库和用户的信息,我和显示有关数据库和用户的信息,我们称
6、之为们称之为系统存储过程系统存储过程。系统存储过程主要存储在系统存储过程主要存储在mastermaster数据库中并以数据库中并以sp_sp_为前缀,并且系统存储过程主要是从系统表中获为前缀,并且系统存储过程主要是从系统表中获取信息,从而为数据库系统管理员管理取信息,从而为数据库系统管理员管理SQL ServerSQL Server提供支持。提供支持。9 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系本地存储过程本地存储过程本地存储过程也就是用户自行创建并存储在用也就是用户自行创建并存储在用户数据库中的存储过程,一般所说的存储过程指的户数据库中的存储过程,一般所说
7、的存储过程指的就是本地存储过程。就是本地存储过程。用户创建的存储过程是由用户创建并能完成某用户创建的存储过程是由用户创建并能完成某一特定功能一特定功能(如查询用户所需的数据信息如查询用户所需的数据信息)的存储过的存储过程。程。10 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系临时存储过程(1)(1)本地临时存储过程本地临时存储过程:如果在创建存储过程时,其:如果在创建存储过程时,其名称以名称以“#”#”号开头,则该存储过程将成为一个存放号开头,则该存储过程将成为一个存放在在tempdbtempdb数据库中的本地临时存储过程。数据库中的本地临时存储过程。(2)(2
8、)全局临时存储过程全局临时存储过程:只要所创建的存储过程名称:只要所创建的存储过程名称是以两个是以两个“#”#”号开头,则该存储过程将成为一个存号开头,则该存储过程将成为一个存储在储在tempdbtempdb数据库中的全局临时存储过程。数据库中的全局临时存储过程。11 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系创建存储过程CREATECREATE PROCPROCedureedure procedure_nameprocedure_name ;number ;number parameter parameter data_typedata_type =defa
9、ult,=default,AS AS sql_statementsql_statementprocedure_nameprocedure_name:给出存储过程名;:给出存储过程名;numbernumber:对同名的存储过程指定一个序号;:对同名的存储过程指定一个序号;parameterparameter:给出参数名;:给出参数名;data_typedata_type:指出参数的数据类型;:指出参数的数据类型;=default=default:给出参数的默认值;:给出参数的默认值;sql_statementsql_statement:存储过程所要执行的:存储过程所要执行的SQLSQL语句,它可
10、以是语句,它可以是一组一组SQLSQL语句,可以包含流程控制语句等。语句,可以包含流程控制语句等。12 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系实例CREATE CREATE PROCedurePROCedure sp_getempsp_getemp;1;1AS AS SELECT*FROM SELECT*FROM 职工职工13 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系实例CREATE CREATE PROCedurePROCedure sp_getemp;2 sp_getemp;2(salary(salary intin
11、t)AS AS SELECT*FROM SELECT*FROM 职工职工 WHERE WHERE 工资工资 salary salary14 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系注意 存储过程一般用来完成数据查询和数据处理操作,所以存储过程一般用来完成数据查询和数据处理操作,所以在存储过程中不可以使用创建数据库对象的语句,即在存储在存储过程中不可以使用创建数据库对象的语句,即在存储过程中一般不能含有以下语句:过程中一般不能含有以下语句:CREATE TABLECREATE TABLE CREATE VIEW CREATE VIEW CREATE DEFAU
12、LT CREATE DEFAULT CREATE RULE CREATE RULE CREATE TRIGGER CREATE TRIGGER CREATE PROCEDURE CREATE PROCEDURE15 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系执行存储过程 EXECuteEXECute=|16 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系执行带参数的sp_getemp;2存储过程execute sp_getemp;2 1240execute sp_getemp;2 124017 数据库技术数据库技术合肥学院电子信息
13、与电气工程系合肥学院电子信息与电气工程系存储过程的返回值和状态信息无论什么时候执行存储过程,总要返回一个结无论什么时候执行存储过程,总要返回一个结果码,用以指示存储过程的执行状态。如果存储过果码,用以指示存储过程的执行状态。如果存储过程执行成功,返回的结果码是程执行成功,返回的结果码是0 0;如果存储过程执行;如果存储过程执行失败,返回的结果码一般是失败,返回的结果码一般是一个负数一个负数,它和失败的,它和失败的类型有关。我们在创建存储过程时,也可以定义自类型有关。我们在创建存储过程时,也可以定义自己的状态码和错误信息。己的状态码和错误信息。18 数据库技术数据库技术合肥学院电子信息与电气工程
14、系合肥学院电子信息与电气工程系例:带参数和返回状态值的存储过程。CREATE CREATE PROCedurePROCedure sp_getemp;3 sp_getemp;3(salary(salary intint=NULL)=NULL)AS AS IF salary IS NULLIF salary IS NULLBEGINBEGIN PRINT PRINT 必须提供一个数值作参数!必须提供一个数值作参数!RETURN 13 RETURN 13ENDENDIF NOT EXISTS(SELECT*FROM IF NOT EXISTS(SELECT*FROM 职工职工 WHERE WHER
15、E 工资工资 salary)salary)BEGINBEGIN PRINT PRINT 没有满足条件的记录!没有满足条件的记录!RETURN-103 RETURN-103ENDENDSELECT*FROM SELECT*FROM 职工职工 WHERE WHERE 工资工资 salary salaryRETURN 0RETURN 019 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系例:执行以上存储过程DECLARE status DECLARE status intintEXECUTE status=sp_getemp;3 1200EXECUTE status=s
16、p_getemp;3 1200print statusprint status20 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系存储过程的修改和删除修改存储过程的语句是(一般格式):修改存储过程的语句是(一般格式):ALTER ALTER PROCPROCedureedure procedure_nameprocedure_name ;number ;number parameter parameter data_typedata_type =default,=default,AS AS sql_statementsql_statement 删除存储过程的语句是
17、:删除存储过程的语句是:DROP DROP PROCPROCedureedure procedure_nameprocedure_name注注意意:删删除除存存储储过过程程的的语语句句中中不不能能指指定定序序号号。也也就就是是说说,该语句将同时删除同名的所有存储过程。该语句将同时删除同名的所有存储过程。21合肥学院电子系合肥学院电子系触发器 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系简介触发器触发器可以看作是一类可以看作是一类特殊的存储过程特殊的存储过程,它在满足某个特,它在满足某个特定条件时自动触发执行。定条件时自动触发执行。触发器是为表上的更新、插入、删除
18、操作定义的,也就是触发器是为表上的更新、插入、删除操作定义的,也就是说当表上发生更新、插入或删除操作时触发器将执行。说当表上发生更新、插入或删除操作时触发器将执行。23 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系触发器的用途1.1.触发器可以通过级联的方式对相关的表进行修改。比如,触发器可以通过级联的方式对相关的表进行修改。比如,对父表的修改,可以引起对子孙表的一系列修改,从而对父表的修改,可以引起对子孙表的一系列修改,从而保证数据的一致性和完整性。保证数据的一致性和完整性。2.2.触发器可以禁止或撤消违反参照完整性的修改。触发器可以禁止或撤消违反参照完整性的
19、修改。3.3.触发器可以强制比用触发器可以强制比用CHECKCHECK约束定义更加复杂的限制。约束定义更加复杂的限制。24 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系特点触发器是触发器是依附于表的数据库对象依附于表的数据库对象。一个触发器和三部分。一个触发器和三部分内容有关:内容有关:定义触发器的表定义触发器的表激活触发器的数据操作语句激活触发器的数据操作语句触发器要采取的动作触发器要采取的动作25 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气工程系建立触发器CREATE TRIGGER CREATE TRIGGER trigger_
20、nametrigger_name ON table ON tableFOR INSERT|UPDATE|DELETE FOR INSERT|UPDATE|DELETE AS AS IF IF UPDATE(columnUPDATE(column)AND|OR)AND|OR UPDATE(columnUPDATE(column)sql_statementsql_statementtrigger_nametrigger_name:给出了触发器的名称;:给出了触发器的名称;tabletable:说明了定义触发器的表或视图;:说明了定义触发器的表或视图;FOR INSERT|UPDATE|DELETE
21、 FOR INSERT|UPDATE|DELETE:说明了激活触发器的数据操作:说明了激活触发器的数据操作语句;语句;IF IF UPDATE(columnUPDATE(column):对应于:对应于UPDATEUPDATE类触发器,说明如果更新某(些)类触发器,说明如果更新某(些)列则做如何处理;列则做如何处理;sql_statementsql_statement:触发器所要执行的:触发器所要执行的SQLSQL语句,它可以是一组语句,它可以是一组SQLSQL语句,语句,可以包含流程控制语句等。可以包含流程控制语句等。26 数据库技术数据库技术合肥学院电子信息与电气工程系合肥学院电子信息与电气
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第06章 存储过程、触发器和数据性 06 存储 过程 触发器 数据
