《数据库系统原理与应用(第二版)》课件第7章.ppt

上传人(卖家):momomo 文档编号:7333347 上传时间:2023-11-28 格式:PPT 页数:49 大小:803KB
下载 相关 举报
《数据库系统原理与应用(第二版)》课件第7章.ppt_第1页
第1页 / 共49页
《数据库系统原理与应用(第二版)》课件第7章.ppt_第2页
第2页 / 共49页
《数据库系统原理与应用(第二版)》课件第7章.ppt_第3页
第3页 / 共49页
《数据库系统原理与应用(第二版)》课件第7章.ppt_第4页
第4页 / 共49页
《数据库系统原理与应用(第二版)》课件第7章.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

1、第七章 SQL Server 2005程序设计7.1 Transact-SQL程序设计基础7.1.1 Transact-SQL语法格式约定大写字母:代表大写字母:代表Transact-SQLTransact-SQL保留的关键字保留的关键字.小字字母:表示对象标识符和表达式等小字字母:表示对象标识符和表达式等 .大括号大括号或尖括号或尖括号:大括号或尖括号中的内容为必选:大括号或尖括号中的内容为必选参数,其中可包含多个选项,各选项之间用竖线分隔,用参数,其中可包含多个选项,各选项之间用竖线分隔,用户必须从这些选项中选择一项户必须从这些选项中选择一项 .方括号方括号:它所列出的项目列表为可选项,用

2、户可根据:它所列出的项目列表为可选项,用户可根据需要选择使用需要选择使用 .竖线:表示参数之间是竖线:表示参数之间是“或或”的关系,可以从中选择的关系,可以从中选择任意一个使用任意一个使用 .,nn:表示重复前面的语法单元,各项之间用逗号分隔。:表示重复前面的语法单元,各项之间用逗号分隔。nn:表示重复前面的语法单元,各项之间用空格分隔。:表示重复前面的语法单元,各项之间用空格分隔。注释:注释为注释:注释为Transact-SQLTransact-SQL脚本程序中的说明信息,脚本程序中的说明信息,SQL SQL ServerServer不执行这部分内容。不执行这部分内容。单行注释:使用两个连字

3、符(单行注释:使用两个连字符(-)作为注释的开始标志。从)作为注释的开始标志。从它到本行行尾的所有内容均为注释信息。它到本行行尾的所有内容均为注释信息。块注释:块注释的格式为块注释:块注释的格式为/*/,其间的所有内容均为注释,其间的所有内容均为注释信息。块注释与单行注释的不同之处是它可以跨越多行,并且信息。块注释与单行注释的不同之处是它可以跨越多行,并且可以插入在程序代码中的任何地方。可以插入在程序代码中的任何地方。7.1.1 Transact-SQL语法格式约定(续)7.1.2 标识符1常规标识符 常规标识符遵守以下的命名规则:常规标识符遵守以下的命名规则:标识符长度可以为标识符长度可以为

4、1 1128128个字符。个字符。标识符的首字符必须为标识符的首字符必须为Unicode 2.0Unicode 2.0标准所定义标准所定义的字母或的字母或_ _、符号。、符号。标识符第一个字符后面的字符可以为标识符第一个字符后面的字符可以为Unicode Unicode Standard 2.0Standard 2.0所定义的字符、数字或、所定义的字符、数字或、#、$、_ _符号。符号。标识符内不能嵌入空格和特殊字符。标识符内不能嵌入空格和特殊字符。标识符不能与标识符不能与SQL ServerSQL Server中的保留关键字同名。中的保留关键字同名。2定界标识符定界标识符允许在标识符中使用定

5、界标识符允许在标识符中使用SQL ServerSQL Server保留关键保留关键字或常规标识符中不允许使用的一些特殊字符,但必字或常规标识符中不允许使用的一些特殊字符,但必须由双引号或方括号定界符进行分隔须由双引号或方括号定界符进行分隔 .7.1.3 运算符1算术运算符+:加。:加。-:减。:减。*:乘。:乘。/:除。:除。%:取模。:取模。2位运算符对整数或二进制数据进行按位与(对整数或二进制数据进行按位与(&)、或()、或(|)、)、异或(异或()、求反()等逻辑运算。)、求反()等逻辑运算。3比较运算符:大于。:大于。=:等于。:等于。=:大于等于。:大于等于。=:小于等于。:小于等于

6、。:不等于。:不等于。!=!=:不等于。:不等于。!:不大于。:不大于。!:不小于。:不小于。4逻辑运算符ANDAND。OROR。NOTNOT。NOT BETWEENNOT BETWEEN.AND.AND。NOT LIKENOT LIKE。NOT INNOT IN。IS NOT NULLIS NOT NULL。ALLALL、SOMESOME、ANYANY。NOT EXISTSNOT EXISTS。6 6赋值运算符赋值运算符SQL ServerSQL Server中的赋值运算符为等号(中的赋值运算符为等号(=),它将表),它将表达式的值赋给一个变量达式的值赋给一个变量 .5 5字符串连接符字符串

7、连接符“+”可以实现字符串之间的连接操作可以实现字符串之间的连接操作 714变量DECLAREDECLARE语句的语法格式为:语句的语法格式为:DECLARE DECLARE variable_name date_typevariable_name date_type,variable_name data_type,variable_name data_type 1变量声明2变量赋值 SETSET语句的语法格式为语句的语法格式为 :SET variable_name=expressionSET variable_name=expressionSELECTSELECT语句为变量赋值的语法格式为:

8、语句为变量赋值的语法格式为:SELECT variable_name=expression FROM SELECT variable_name=expression FROM WHERE WHERE 7.1.5 流程控制语句1BEGINEND语句BEGINBEGIN SQL SQL语句语句块语句语句块 ENDEND2条件语句条件语句的语法格式为:条件语句的语法格式为:IFIF SQL SQL语句语句块语句语句块 ELSEELSE SQL SQL语句语句块语句语句块7.1.5 流程控制语句(续)3转移语句GOTOGOTO 4循环语句循环语句的语法格式为:循环语句的语法格式为:WHILE WHIL

9、E SQLSQL语句语句块语句语句块 BREAKBREAKSQLSQL语句语句块语句语句块 CONTINUECONTINUESQLSQL语句语句块语句语句块 7.1.5 流程控制语句(续)5等待语句WAITFOR DELAY interval TIME time6返回语句RETURN整数表达式简单 CASE 函数语法:CASE input_expression WHEN when_expression THEN result_expression .n ELSE else_result_expression END 7CASE语句CASE 搜索函数语法:CASE WHEN Boolean_ex

10、pression THEN result_expression .n ELSE else_result_expression END7.1.6异常处理1TRY.CATCH语句TRY.CATCHTRY.CATCH语句是在语句是在SQL SERVER2005SQL SERVER2005数据库中数据库中新加入的,用于实现异常的处理。新加入的,用于实现异常的处理。TRY.CATCHTRY.CATCH语法结构如下:语法结构如下:BEGIN TRYBEGIN TRY 语句语句块语句语句块 END TRYEND TRYBEGIN CATCHBEGIN CATCH 语句语句块语句语句块 END CATCHEN

11、D CATCH2与异常有关的函数ERROR_NUMBER()ERROR_NUMBER():返回错误号。:返回错误号。ERROR_SEVERITY()ERROR_SEVERITY():返回错误的严重级别。:返回错误的严重级别。ERROR_STATE()ERROR_STATE():返回错误状态号。:返回错误状态号。ERROR_PROCEDURE()ERROR_PROCEDURE():返回发生错误的存储过程:返回发生错误的存储过程或触发器的名称。或触发器的名称。ERROR_LINE()ERROR_LINE():返回发生错误的行号。:返回发生错误的行号。ERROR_MESSAGE()ERROR_MES

12、SAGE():返回错误的消息文本。:返回错误的消息文本。3抛出错误语句RAISERROR(message|msg_id,severity,state ,argument ,.n )WITH option ,.n 7.1.7 7.1.7 游标游标(1)游标的定义 DECLARE DECLARE INSENSITIVE SCROLL CURSOR INSENSITIVE SCROLL CURSORFORFOR FOR FOR(2)打开游标 OPEN OPEN (3)从一个打开的游标中提取数据行 FETCH NEXT|PRIOR|FIRST|LAST|ABSOLUTE n|FETCH NEXT|PR

13、IOR|FIRST|LAST|ABSOLUTE n|nvar|RELATIVE n|nvar FROM nvar|RELATIVE n|nvar FROM INTO INTO(4)关闭游标 CLOSE CLOSE (5)释放游标 DEALLOCATE DEALLOCATE (6)游标应用举例 在图书管理信息系统(在图书管理信息系统(BookSysBookSys)中,有一个名为)中,有一个名为BookBook的的图书信息表,其中有一个名为图书信息表,其中有一个名为PricePrice的图书单价字段。考的图书单价字段。考虑到图书维护成本的不断增长,再考虑按如下规则对图虑到图书维护成本的不断增长,再

14、考虑按如下规则对图书单价进行提价:书单价进行提价:3030元以下的,提价元以下的,提价10%10%;6060元以下的,元以下的,提价提价20%20%;6060元以上的,提价元以上的,提价30%30%。参考教材中的代码。参考教材中的代码.7.2 存储过程7.2.1 存储过程概述存储过程分为三类:系统提供的存储过程、用户定义存储过程分为三类:系统提供的存储过程、用户定义的存储过程和扩展存储过程的存储过程和扩展存储过程.(2)(2)自定义的存储过程:是由用户为完成某一特定功自定义的存储过程:是由用户为完成某一特定功能而编写的存储过程。在能而编写的存储过程。在SQL SERVER2005SQL SER

15、VER2005中,按编写中,按编写的语言,又分为两种类型:的语言,又分为两种类型:T-SQLT-SQL和和CLRCLR。(1 1)系统提供的存储过程:在安装)系统提供的存储过程:在安装SQL ServerSQL Server时,系时,系统创建了很多系统存储过程统创建了很多系统存储过程 (3 3)扩展存储过程:是对动态链接库()扩展存储过程:是对动态链接库(DLLDLL)函数的)函数的调用调用 7.2.2 存储过程的优点(1 1)减少网络流量)减少网络流量 (2 2)增强代码的重用性和共享性)增强代码的重用性和共享性 (3 3)加快系统运行速度)加快系统运行速度 (4 4)加强安全性)加强安全性

16、 7.2.3用T-SQL语句创建存储过程创建存储过程的语法为:创建存储过程的语法为:CREATE PROCEDURE CREATE PROCEDURE WITH ENCRYPTIONWITH ENCRYPTION =default OUTPUT =default OUTPUT ,.n ,.n AS sql_statement .n AS sql_statement .n WITH ENCRYPTIONWITH ENCRYPTION:加密存储过程代码,保护作者知识产权。:加密存储过程代码,保护作者知识产权。procedure_nameprocedure_name:存储过程的名称。:存储过程的名称

17、。parameterparameter:参数名称,注意名称前必须有:参数名称,注意名称前必须有“”符号。符号。data_typedata_type:参数的数据类型。:参数的数据类型。defaultdefault:输入参数的缺省值。:输入参数的缺省值。OUTPUTOUTPUT:表明该参数是输出参数。:表明该参数是输出参数。sql_statementsql_statement:SQLSQL语句,这是存储过程的重点构造部分语句,这是存储过程的重点构造部分 CREATE PROCEDURE procReader1 CREATE PROCEDURE procReader1-创建存储过程创建存储过程Car

18、dID CHAR(10)CardID CHAR(10)ASASSELECT BORROW.CARDID,READER.NAME,BORROW.BOOKID,SELECT BORROW.CARDID,READER.NAME,BORROW.BOOKID,BOOK.BOOKNAME,BDATE,SDATEBOOK.BOOKNAME,BDATE,SDATEFROM BORROW,BOOK,READERFROM BORROW,BOOK,READERWHERE BORROW.BOOKID=BOOK.BOOKIDWHERE BORROW.BOOKID=BOOK.BOOKIDAND BORROW.CARDID

19、=READER.CARDIDAND BORROW.CARDID=READER.CARDIDAND READER.CARDID=CardIDAND READER.CARDID=CardID例例:创建一存储过程,根据传入的读者卡号,检索该读者创建一存储过程,根据传入的读者卡号,检索该读者的借书信息,包括卡号、姓名、书号、书名、借书时间和的借书信息,包括卡号、姓名、书号、书名、借书时间和还书时间。该存储过程带一输入参数:还书时间。该存储过程带一输入参数:CardIDCardID,即传入一,即传入一个读者卡号个读者卡号 724执行存储过程执行存储过程的完整语法如下:执行存储过程的完整语法如下:EXEC

20、 return_value=procedure_name EXEC return_value=procedure_name Value_ListValue_Listreturn_value=return_value=用于接收存储过程的返回值。用于接收存储过程的返回值。procedure_nameprocedure_name:要执行的存储过程的名称。:要执行的存储过程的名称。Value_ListValue_List:输入参数值。参数之间用逗号分隔,输出:输入参数值。参数之间用逗号分隔,输出参数一定要传变量参数一定要传变量 7.2.5 删除存储过程删除存储过程是指删除由用户创建的存储过程。删除存储

21、过程是指删除由用户创建的存储过程。格式:格式:DROP PROCEDURE DROP PROCEDURE 存储过程名。存储过程名。7.2.6在 Management Studio中修改存储过程 在在“对象资源管理器对象资源管理器”中中 ,展开用户数据库展开用户数据库(如(如BOOKSYSBOOKSYS)、)、“可可编程性编程性”、“存储过存储过程程”,在,在“存储过程存储过程”节点下可以看到用户节点下可以看到用户创建的所有存储过程,创建的所有存储过程,右击右击要修改的存储过要修改的存储过程程,在弹出的菜单中在弹出的菜单中选择选择“修改修改”命令命令。代码编辑器中显示该代码编辑器中显示该存储过程

22、的代码如图存储过程的代码如图所示所示 7.2.7 使用Management Studio中模板新建存储过程直接在直接在“存储过程存储过程”节点上右键单击,在弹出菜单中选择节点上右键单击,在弹出菜单中选择“新新建存储过程建存储过程”命令,系统会打开代码编辑器,并在代码编辑器命令,系统会打开代码编辑器,并在代码编辑器中显示创建存储过程的模板。用户可以修改模板中的参数并添中显示创建存储过程的模板。用户可以修改模板中的参数并添加相关加相关T-SQLT-SQL代码代码 .7.3 函数7.3.1 函数类型(1 1)内连标量函数:是指返加类型为)内连标量函数:是指返加类型为RETURNRETURN子句子句中

23、定义的数据类型的单个值中定义的数据类型的单个值 ,内连标量函数的函数内连标量函数的函数体是单个体是单个T-SQLT-SQL语句语句 (2 2)多语句标量函数:是指返加类型为)多语句标量函数:是指返加类型为RETURNRETURN子句子句中定义的数据类型的单个值。函数体是包含在中定义的数据类型的单个值。函数体是包含在BEGIN.ENDBEGIN.END之间的一组之间的一组T-SQLT-SQL语句。语句。(3 3)内连表值函数:返回)内连表值函数:返回TABLETABLE数据类型,它没有数据类型,它没有函数体,返回的表是单个函数体,返回的表是单个SELECTSELECT语句执行后的返回语句执行后的

24、返回结果集结果集 7.3.1 函数类型(续)(4 4)多语句表值函数:返回)多语句表值函数:返回TABLETABLE数据类型,函数体中数据类型,函数体中包含一组包含一组T-SQLT-SQL语句,这些语句可以生成行,并插入到语句,这些语句可以生成行,并插入到返回表中。返回表中。(5 5)内置函数:也称系统函数,是)内置函数:也称系统函数,是SQL SERVER 2005SQL SERVER 2005提提供的返回标量数据类型或供的返回标量数据类型或TABLETABLE数据类型的函数。内置数据类型的函数。内置函数不能修改。函数不能修改。732函数的优点函数和存储过程类似,具有执行速度快、减少网络流量

25、、函数和存储过程类似,具有执行速度快、减少网络流量、增强代码的重用性和共享性等优点增强代码的重用性和共享性等优点 7.3.3 函数与存储过程如果存储过程返回单个标量值,则使用标量函数更有如果存储过程返回单个标量值,则使用标量函数更有优势;如果存储过程返回单个结果集,则可以使用表优势;如果存储过程返回单个结果集,则可以使用表值函数来替代。值函数来替代。7.3.4 用T-SQL语句创建函数1 1创建标量函数创建标量函数CREATE FUNCTION CREATE FUNCTION (参数名参数名 参数数据类型参数数据类型 =默认值默认值 ,.n ,.n )RETURNS RETURNS 返回的数据

26、类型返回的数据类型 WITH ENCRYPTION WITH ENCRYPTION AS AS BEGIN BEGIN 函数体函数体RETURN RETURN ENDEND例例:创建内连标量函数,返回给定创建内连标量函数,返回给定日期的月信息。日期的月信息。CREATE FUNCTION getMonth CREATE FUNCTION getMonth -函数名函数名(date datetime)-(date datetime)-参数参数RETURNS int -RETURNS int -返回类型返回类型 AS AS BEGIN BEGIN RETURN DATEPART(MM,date)R

27、ETURN DATEPART(MM,date)-返回值返回值ENDEND2 2创建内连表值函数创建内连表值函数CREATE FUNCTION CREATE FUNCTION (参数名参数名 参数数据类型参数数据类型 =默认默认值值 ,.n ,.n )RETURNS TABLERETURNS TABLE WITH ENCRYPTION WITH ENCRYPTION AS AS RETURN SELECTRETURN SELECT语句语句 例例7-15 7-15 用函数返回指定读者的所有借书(未还)记录用函数返回指定读者的所有借书(未还)记录 CREATE FUNCTION getBorrow(

28、cardid char(14)CREATE FUNCTION getBorrow(cardid char(14)RETURNS TABLE RETURNS TABLE AS AS RETURN SELECT RETURN SELECT*FROM borrow WHERE cardid=cardid FROM borrow WHERE cardid=cardid -返回结果返回结果3 3创建多语句表值函数创建多语句表值函数CREATE FUNCTION CREATE FUNCTION (参数名参数名 参数数据类型参数数据类型 =默认值默认值 ,.n ,.n )RETURNS return_var

29、iable TABLE RETURNS return_variable TABLE WITH ENCRYPTION WITH ENCRYPTION AS AS BEGIN BEGIN 函数体函数体 RETURNRETURNENDEND 7.3.5 删除函数格式:格式:DROP FUNCTION DROP FUNCTION 7.3.6 在S Management Studio中修改函数在在“对象资源管理器对象资源管理器”中中 ,依次展开依次展开“数据库数据库”节点、用户数据库(本例节点、用户数据库(本例为为BOOKSYSBOOKSYS)、)、“可编程可编程性性”、“函数函数”,根据函,根据函数类

30、型选择数类型选择“表值函数表值函数”或或“标量函数标量函数”结点,在结点,在该节点下可以看到用户创该节点下可以看到用户创建的所有相关函数,选择建的所有相关函数,选择要修改的函数要修改的函数.右击函数右击函数名,在弹出的菜单中选择名,在弹出的菜单中选择“修改修改”命令命令.7.3.7 函数的调用1标量函数调用SQL SERVER 2005SQL SERVER 2005中,标量函数可以直接调用,凡是可以出中,标量函数可以直接调用,凡是可以出现表达式的地方都可以调用标量函数。标量函数的调用语现表达式的地方都可以调用标量函数。标量函数的调用语法为:法为:.函数名函数名2 2表值函数调用表值函数调用SQ

31、L SERVER 2005SQL SERVER 2005中,表值函数返回的是结果集,在中,表值函数返回的是结果集,在T-SQLT-SQL中可以象访问表或视图一样调用表值函数。中可以象访问表或视图一样调用表值函数。7.3.8 常用内置函数1日期与时间函数(1 1)GETDATEGETDATE函数:函数:GETDATEGETDATE()没有输入参数,返()没有输入参数,返回当前系统日期和时间回当前系统日期和时间 (2 2)DATEPARTDATEPART函数:函数:DATEPARTDATEPART(datepart,datepart,datedate),返回),返回datedate参数指定的日期中

32、的参数指定的日期中的datepartdatepart参参数指定的日期部份的整数数指定的日期部份的整数 .(3 3)DATEDIFFDATEDIFF函数:函数:DATEDIFF(datepart,DATEDIFF(datepart,startdate,enddate)startdate,enddate),返回,返回enddateenddate和和startdatestartdate表示的两个日期之差,结果由参数表示的两个日期之差,结果由参数datepartdatepart决定决定 1日期与时间函数(续)(4 4)DATEADDDATEADD函数:函数:DATEADD(datepart,numbe

33、r,DATEADD(datepart,number,date)date),返回参数,返回参数datedate指定的日期上增加指定的日期上增加numbernumber后得后得到的新的日期到的新的日期(5 5)YEARYEAR、MONTHMONTH、DAYDAY函数:它们均接收一个日期函数:它们均接收一个日期参数,返回给定日期中年、月、日参数,返回给定日期中年、月、日(6 6)DATENAMEDATENAME函数:函数:DATENAME DATENAME(datepart,date)(datepart,date),返回指定日期的指定日期部,返回指定日期的指定日期部份的字符串。份的字符串。2字符串函

34、数ASCII ASCII NCHAR NCHAR SOUNDEX SOUNDEX CHAR CHAR PATINDEX PATINDEX SPACE SPACE CHARINDEX CHARINDEX QUOTENAME QUOTENAME STR STR DIFFERENCE DIFFERENCE REPLACE REPLACE STUFFSTUFFLEFT LEFT REPLICATE REPLICATE SUBSTRING SUBSTRING LEN LEN REVERSE REVERSE UNICODE UNICODE LOWER LOWER RIGHT RIGHT UPPER UPP

35、ER LTRIM LTRIM RTRIMRTRIM 3数学函数SQL Server 2005SQL Server 2005提供了大量的数学函数,参考教材提供了大量的数学函数,参考教材表表7-57-5。7.4 触发器 触发器是一种特殊的存储过程,当在指定的数据表进行触发器是一种特殊的存储过程,当在指定的数据表进行行插入、修改或删除操作时被行插入、修改或删除操作时被自动调用自动调用 741触发器概述1触发器的概念触发器(触发器(TriggerTrigger)是用户对某一表中的数据做插入、)是用户对某一表中的数据做插入、更新和删除操作时被触发执行的一段程序更新和删除操作时被触发执行的一段程序.通常我

36、们使用触发器来检查用户对表的操作是否符通常我们使用触发器来检查用户对表的操作是否符合整个应用系统的需求及是否符合商业规则,以维合整个应用系统的需求及是否符合商业规则,以维持表内数据的完整性和正确性。持表内数据的完整性和正确性。2与触发器有关的两个特殊表SQL ServerSQL Server为每个触发器创建了两个专用临时表:为每个触发器创建了两个专用临时表:INSERTEDINSERTED表和表和DELETEDDELETED表表 ,它们存放于它们存放于内存内存中,而不是存放中,而不是存放在数据库中。这两个表的结构总是与被该触发器作用的表在数据库中。这两个表的结构总是与被该触发器作用的表的结构相

37、同的结构相同(1 1)INSERTEDINSERTED表:存放由于表:存放由于INSERTINSERT或或UPDATEUPDATE语句的执行语句的执行而导致要加到该触发器作用的表中去的所有新行而导致要加到该触发器作用的表中去的所有新行(2 2)DELETEDDELETED表:存放由于表:存放由于DELETEDELETE或或UPDATEUPDATE语句的执行而语句的执行而导致要从被该触发器作用的表中删除的所有行。即把被作导致要从被该触发器作用的表中删除的所有行。即把被作用表中要删除或要更新的旧值移到用表中要删除或要更新的旧值移到DELETEDDELETED表中表中 3触发器的分类(1 1)DML

38、DML触发器:触发器:DMLDML触发器是当数据库中发生数据操作语触发器是当数据库中发生数据操作语言(言(DMLDML)事件时要执行的操作)事件时要执行的操作DML触发器包括两种类型,触发器包括两种类型,AFTER触发器和触发器和INSTEADOF触发器触发器.(2 2)DDLDDL触发器:触发器:DDLDDL触发器是触发器是SQL Server 2005SQL Server 2005新增的功新增的功能。它是一种特殊的触发器,在响应数据定义语言(能。它是一种特殊的触发器,在响应数据定义语言(DDLDDL)时触发时触发 4创建触发器的T-SQL语CREATE TRIGGER CREATE TRI

39、GGER ON ON WITH ENCRYPTIONWITH ENCRYPTION INSERT ,UPDATE ,DELETEASAS IF UPDATE(IF UPDATE(列名列名 )SQL .n WITH ENCRYPTION选项加密触发器代码,保护作者的知识产权 UPDATE(列名)是一个函数,用于测试是否对表或视图的指定列进行了 INSERT 或 UPDATE 操作 7.4.2 AFTER触发器AFTERAFTER触发器是在执行触发器是在执行INSERTINSERT、UPDATEUPDATE、DELETEDELETE任一操作任一操作之后被触发。之后被触发。AFTERAFTER触发器

40、只能在表上定义触发器只能在表上定义 AFTERAFTER触发器是在执行触发器是在执行INSERTINSERT、UPDATEUPDATE、DELETEDELETE任一操作任一操作之后被触发。之后被触发。AFTERAFTER触发器只能在表上定义触发器只能在表上定义 1INSERT触发器INSERTINSERT触发器由触发器由INSERTINSERT语句触发,即用户在表中插入一语句触发,即用户在表中插入一条记录且插入成功时,触发条记录且插入成功时,触发INSERTINSERT触发器触发器 例例7-17 7-17 创建一触发器以实现如下功能:当往创建一触发器以实现如下功能:当往BORROWBORROW

41、表表中插入一条记录时,如果书号或卡号不存在,则撤消插中插入一条记录时,如果书号或卡号不存在,则撤消插入入 INSERTINSERT触发器的工作过程如下:触发器的工作过程如下:(1 1)用户或系统运行)用户或系统运行INSERTINSERT语句。语句。(2 2)如果记录不违反限制,则将记录插入到临时表)如果记录不违反限制,则将记录插入到临时表INSERTEDINSERTED中。中。(3 3)触发触发器。)触发触发器。(4 4)如果触发器执行完毕而无错误,则)如果触发器执行完毕而无错误,则INSERTEDINSERTED表被删除,插入操作表被删除,插入操作完成。完成。2DELETE触发器DELET

42、E触发器由触发器由DELETE语句触发,即用户在表中删除一条记录时,触语句触发,即用户在表中删除一条记录时,触发发DELETE触发器触发器 .例例7-18 7-18 创建一触发器以实现如下功能:当试图删除创建一触发器以实现如下功能:当试图删除BORROW BORROW 表中的一表中的一条记录时,若还书日期为空或还书日期距今还不到半年,则撤消事务条记录时,若还书日期为空或还书日期距今还不到半年,则撤消事务 .DELETEDELETE触发器的工作过程如下:触发器的工作过程如下:(1 1)用户或系统运行)用户或系统运行DELETEDELETE语句。语句。(2 2)如果记录不违反外部关键字限制,则删除

43、表中的记录)如果记录不违反外部关键字限制,则删除表中的记录并将其插入到临时表并将其插入到临时表DELETEDDELETED中。中。(3 3)触发触发器。)触发触发器。(4 4)如果触发器执行完毕而无错误,则)如果触发器执行完毕而无错误,则DELETEDDELETED表被删除,表被删除,删除操作完成。删除操作完成。3UPDATE触发器更新操作可以看成一个删除加一个插入:删除旧值和插更新操作可以看成一个删除加一个插入:删除旧值和插入新值。入新值。例例7-19 7-19 创建一触发器以实现如下功能:如果要更改创建一触发器以实现如下功能:如果要更改READERREADER表中的表中的CARDIDCAR

44、DID,则先检查,则先检查BORROWBORROW表中是否有记录表中是否有记录引用了该引用了该CARDIDCARDID。如果有引用,则不能更改;如果没有。如果有引用,则不能更改;如果没有引用,则可以更改引用,则可以更改 .UPDATEUPDATE触发器的工作过程如下:触发器的工作过程如下:(1 1)用户或系统运行)用户或系统运行UPDATEUPDATE语句。语句。(2 2)如果记录不违反限制,则更新表并把旧记录插入到)如果记录不违反限制,则更新表并把旧记录插入到DELETEDDELETED表中,表中,把新记录插入到把新记录插入到INSERTEDINSERTED表中。表中。(3 3)触发触发器。

45、)触发触发器。(4 4)如果触发器执行完毕而无错误,则)如果触发器执行完毕而无错误,则DELETEDDELETED和和INSERTEDINSERTED表被删除,表被删除,更新操作完成。更新操作完成。7.4.3 INSTEAD OF触发器INSTEAD OFINSTEAD OF触发器可以对表或视图生成,但表或视图中触发器可以对表或视图生成,但表或视图中的每个操作只能有一个的每个操作只能有一个INSTEAD OFINSTEAD OF触发器。触发器。1 1INSTEAD OF INSERTINSTEAD OF INSERT触发器触发器与与AFTERAFTER触发器一样,触发器一样,INSTEAD O

46、F INSERTINSTEAD OF INSERT触发器也使用触发器也使用INSERTEDINSERTED表,但逻辑稍有不同。表,但逻辑稍有不同。(1 1)用户或系统运行)用户或系统运行INSERTINSERT语句。语句。(2 2)记录只插入到)记录只插入到INSERTEDINSERTED表中。表中。(3 3)如果记录不违反任何限制,则触发器负责将记录实)如果记录不违反任何限制,则触发器负责将记录实际地插入到数据表中,否则不插入到表中。际地插入到数据表中,否则不插入到表中。2 2INSTEAD OF DELETEINSTEAD OF DELETE触发器触发器INSTEAD OF DELETEI

47、NSTEAD OF DELETE触发器和触发器和INSTEAD OF INSERTINSTEAD OF INSERT触发器触发器相似,但使用相似,但使用DELETEDDELETED表。表。(1 1)用户或系统运行)用户或系统运行DELETEDELETE语句。语句。(2 2)要删除记录的一个副本拷贝到)要删除记录的一个副本拷贝到DELETEDDELETED表中。表中。(3 3)如果记录不违反任何限制,则触发器负责将记录)如果记录不违反任何限制,则触发器负责将记录从表中删除,否则不删除。从表中删除,否则不删除。3 3INSTEEAD OF UPDATEINSTEEAD OF UPDATE触发器触发

48、器INSTEAD OF UPDATEINSTEAD OF UPDATE触发器用触发器用DELETEDDELETED表和表和INSERTEDINSERTED表表存储更新前后的记录。基础表不进行任何数据修改。存储更新前后的记录。基础表不进行任何数据修改。其逻辑如下:其逻辑如下:(1 1)用户或系统运行)用户或系统运行UPDATEUPDATE语句。语句。(3 3)旧记录插入到)旧记录插入到DELETEDDELETED表中,新记录插入到表中,新记录插入到INSERTEDINSERTED表中。表中。(3 3)如果记录不违反任何限制,则由触发器负责更新)如果记录不违反任何限制,则由触发器负责更新基表中的记录。基表中的记录。7.4.4在 Management Studio中修改触发器在在“对象资源管理器对象资源管理器”中中 ,依次展开依次展开“数据库数据库”、用户数据库(本例为用户数据库(本例为BOOKSYSBOOKSYS)、)、“表表”节点。节点。选择要修改触发器的表并选择要修改触发器的表并展开,再展开展开,再展开“触发器触发器”节点,在该节点下可以看节点,在该节点下可以看到用户创建的与该表相关到用户创建的与该表相关触发器,右击要修改的触触发器,右击要修改的触发器发器 ,在弹出的菜单中,在弹出的菜单中选择选择“修改修改”命令命令 .

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《数据库系统原理与应用(第二版)》课件第7章.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|