SQL存储过程触发器实验复习

合集下载

《数据库原理与应用》实验存储过程和触发器(部分答案)

《数据库原理与应用》实验存储过程和触发器(部分答案)

实验6存储过程和触发器1.实验目的(1)掌握通过SQL Server管理平台和Transact-SQL语句CREATE PROCEDURE创建存储过程的方法和步骤。

(2)掌握使用Transact-SQL语句EXECUTE执行存储过程的方法。

(3)掌握通过SQL Server管理平台和Transact-SQL语句ALTER PROCEDURE修改存储过程的方法。

(4)掌握通过SQL Server管理平台和Transact-SQL语句DROP PROCEDURE删除存储过程的方法。

(5)掌握通过SQL Server管理平台和Transact-SQL语句CREATE TRIGGER创建触发器的方法和步骤。

(6)掌握引发触发器的方法。

(7)掌握使用SQL Server管理平台或Transact-SQL语句修改和删除触发器。

(8)掌握事务、命名事务的创建方法,了解不同类型的事务的处理情况。

2.实验内容及步骤请先附加studentsdb数据库,然后完成以下实验。

(1)在查询设计器中输入以下代码,创建一个利用流控制语句的存储过程letters_print,该存储过程能够显示个小写字母。

语句:CREATE PROCEDURE letters_printASDECLARE@count intSET@count=0WHILE@count<26BEGINPRINT CHAR(ASCII('a')+@count)SET@count=@count+1ENDexec letters_print(2)输入以下代码,创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名对应的学生的各科成绩。

语句:create proc stu_info@name char(10)asbeginSELECT姓名,g.课程编号,分数FROM dbo.student_info s JOIN grade gON s.学号=g.学号WHERE s.姓名=@nameEndexec stu_info'马东'(3)使用系统存储过程sp_rename将存储过程stu_grade更名为stu_g。

存储过程及触发器实验报告

存储过程及触发器实验报告

存储过程及触发器实验报告实验目的:1、了解存储过程及其应用;2、了解触发器及其应用;3、掌握使用存储过程及触发器完成数据操作的方法。

实验过程:1、存储过程存储过程是指一组为了完成特定功能的SQL语句集合。

存储过程可以接收传入参数并返回处理结果。

存储过程的好处是可以减少网络流量,提高性能,增加安全性。

在本次实验中,我们将学习如何创建存储过程。

首先,在MySQL中打开MySQL Workbench,进入我们的实验数据库。

然后我们就可以创建一个存储过程了。

创建存储过程的语法如下:CREATE PROCEDURE procedure_name ()BEGIN-- SQL statementsEND;在这个语法中,procedure_name是我们想要创建的存储过程的名称。

在BEGIN和END 之间,我们可以输入一组SQL语句,这些语句将组成存储过程的主体内容。

我们可以以一个创建一个简单的存储过程作为例子,这个存储过程的作用是输出一条信息。

我们将这个存储过程命名为print_message。

在上面的语句中,我们定义了一个存储过程,它被命名为print_message。

它只包含一条SELECT语句,这条语句将输出Hello, World!这个字符串。

创建完存储过程之后,我们可以通过CALL语句来调用它:CALL print_message();执行这个语句后,我们将会看到Hello, World!这个字符串输出到屏幕上。

2、触发器触发器是一种被动的对象,它是由数据库管理系统在数据表上自动执行的一些操作。

当数据表中发生某些指定的操作时,触发器就会被调用执行。

触发器通常用于数据表中的数据变更操作,比如插入、更新和删除。

在本次实验中,我们将学习如何创建和使用触发器。

在MySQL中创建触发器的语法如下:CREATE TRIGGER trigger_name{BEFORE | AFTER} trigger_event ON table_nameFOR EACH ROW trigger_body;在这个语法中,trigger_name是我们想要创建的触发器的名称。

存储过程和触发器(数据库实验5)

存储过程和触发器(数据库实验5)

数据库基础与实践实验报告实验五存储过程和触发器班级:惠普测试142学号:**********姓名:***日期:2016-11-141 实验目的:1)掌握SQL进行存储过程创建和调用的方法;2)掌握SQL进行触发器定义的方法,理解触发器的工作原理;3)掌握触发器禁用和重新启用的方法。

2 实验平台:操作系统:Windows xp。

实验环境:SQL Server 2000以上版本。

3 实验内容与步骤利用实验一创建的sch_id数据库完成下列实验内容。

1.创建存储过程JSXX_PROC,调用该存储过程时可显示各任课教师姓名及其所教课程名称。

存储过程定义代码:CREATE PROCEDURE JSXX_PROCASSELECT tn 教师姓名,cn 所教课程FROM T,TC,C WHERE T.tno=TC.tno AND o=o存储过程执行语句与执行结果截图:EXECUTE JSXX_PROC2.创建存储过程XM_PROC,该存储过程可根据输入参数(学生姓名)查询并显示该学生的学号、所学课程名称和成绩;如果没有该姓名学生,则提示“无该姓名的同学”。

存储过程定义代码:CREATE PROCEDURE XM_PROC @sname VARCHAR(100)ASBEGINIF EXISTS(SELECT NULL FROM S WHERE sn=@sname)SELECT S.sno 学号,cn 课程,score 成绩FROM S,SC,C WHERE o=o AND SC.sno=S.sno ANDS.sn=@snameELSEPRINT'无该姓名的同学。

'END运行截图:3.创建存储过程XBNL_PROC,该存储过程可根据输入参数(专业名词,默认值为计算机专业),统计并显示该专业各年龄段男、女生人数。

如果没有该专业,则显示“无此专业”。

存储过程定义代码:CREATE PROCEDURE XBNL_PROC@departName VARCHAR(30)='计算机',@begin INT,@end INTASDECLARE @numOfBoys INTDECLARE @numOfGirls INTDECLARE @d# VARCHAR(3)DECLARE @result VARCHAR(50)BEGINSELECT @d# = dno FROM D WHERE dn=@departNameIF @d# IS NOT NULLBEGINSELECT @numOfBoys =COUNT(sno)FROM S WHERE age BETWEEN @begin AND @end AND dno=@d# AND sex='男'SELECT@numOfGirls =COUNT(sno)FROM S WHERE age BETWEEN@begin AND@end AND dno=@d# AND sex='女'SET @result = @departName+'专业年龄在'+CAST(@begin AS VARCHAR(3))+'-'+CAST(@end AS VARCHAR(3))+'之间的男生有'+CAST(@numOfBoys AS VARCHAR(3))+'人,'+'女生有'+CAST(@numOfGirls AS VARCHAR(3))+'人'ENDELSESET @result='无此专业。

数据库 存储过程和触发器 实验报告

数据库 存储过程和触发器 实验报告

实验报告课程名称:数据库原理与应用上机实验名称:存储过程和触发器专业班级:计算机科学与技术1103 指导教师:卫凡学生姓名:贾梦洁学期:2013-2014学年第一学期实验报告课程名称数据库原理与应用实验名称存储过程和触发器姓名贾梦洁学号 201107010330专业班级计1103实验日期2013年12月5日成绩指导教师卫凡一、实验目的1.加深和巩固对存储过程和触发器概念的理解。

2. 掌握触发器的简单应用。

3. 掌握存储过程的简单应用。

二、实验环境硬件环境:PC机软件环境:操作系统为Microsoft Windows 2000或以上版本。

数据库管理系统为Microsoft SQL Server 2000标准版或企业版。

三、实验内容1. 熟悉运用SQL Server企业管理器和查询分析器进行存储过程的创建和删除。

2. 熟悉运用SQL Server企业管理器和查询分析器进行触发器的创建和删除。

四、实验步骤1.建立存储过程class_info ,当执行该过程时,只要给出学生的姓名,就能查到他们的班级名称。

使用存储过程class_info查找学生“张强”的信息。

2.删除存储过程 class_info3.使用触发器实现S,SC表的级联删除删除前:删除后:4.在数据库中创建一个触发器,当向S表中插入一条记录时,检查该记录的学号在S表中是否存在,如果有则不允许插入。

5.创建基于学生表的插入触发器,当向学生表插入一条记录时,返回一条信息:“欢迎新同学”。

6.为S表创建触发器s_insert,当向S表中插入数据时,要求学号必须以"2002"开头,否则取消插入操作。

五、实验总结这次的实验总体来说较前两次简单,因为很多题目都是书上的例题。

不过通过这次实验,也把上课没有认真听讲的部分给补上了。

至少让我不要在见到这些题目的时候觉得陌生,我觉得对我的数据库期末考试是有一定帮助的。

虽然数据库对我来说真的好苦手,但是我相信只要努力了总能做到的。

存储过程、函数与触发器操作答案

存储过程、函数与触发器操作答案

《存储过程、函数与触发器操作》实验一、实验目的与要求1、掌握存储过程的使用。

2、掌握函数的使用。

3、掌握触发器操作。

三、实验内容一、存储过程1、在“教务管理系统”数据库中创建一个名为ProcStudentInfo的存储过程,它返回学生的学号、姓名、性别、班级编号、年级和籍贯信息。

CREATE PROCEDURE Proc_StudentInfoASSELECT 学号,姓名,性别,班级编号,年级,籍贯FROM 学生信息2、用EXECUTE执行Proc_StudentInfo存储过程。

EXECUTE Proc_StudentInfo3、创建一个存储过程,用于返回“教务管理系统”数据库上某个班级中所有学生的信息。

CREATE PROCEDURE Proc_GetClassStudent1@ClassID varchar(14)ASSELECT 学号,姓名,性别,班级编号,年级,籍贯FROM 学生信息WHERE 班级编号=@ClassID4、创建一个存储过程,用于返回“教务管理系统”数据库上某个班级中所有学生的信息,默认班级编号为'20031340000102' 。

CREATE PROCEDURE Proc_GetClassStudent2@ClassID varchar(14)= '20031340000102'ASSELECT 学号,姓名,性别,班级编号,年级,籍贯FROM 学生信息WHERE 班级编号=@ClassIDEXECUTE Proc_GetClassStudent2 '20031340000103'5、创建一个返回执行代码为100的存储过程。

CREATE PROCEDURE Proc_GetClassStudent4@ClassID varchar(14)ASBEGINSELECT 学号,姓名,性别,班级编号,年级,籍贯FROM 学生信息WHERE 班级编号=@ClassIDRETURN 100END6、执行存储过程Proc_GetClassStudent2和Proc_GetClassStudent4,并定义两个个变量存储执行返回代码。

存储过程与触发器实验报告

存储过程与触发器实验报告

存储过程与触发器实验报告一、引言存储过程和触发器是数据库中常用的高级功能,它们能够提高数据库的性能、数据一致性和安全性。

本实验报告将详细介绍存储过程和触发器的概念、用途以及实际应用。

二、存储过程2.1 概念存储过程是一组预定义的SQL语句集合,它们被命名并存储在数据库中,可以作为一个单元来调用和执行。

存储过程可以接受参数,并返回一个或多个结果集。

存储过程可以在应用程序层面减少网络传输,提高数据库性能。

2.2 用途存储过程的应用非常广泛,主要用于以下几个方面: 1. 数据库业务逻辑封装:将复杂的业务逻辑封装到存储过程中,使应用程序只需调用存储过程而不需要编写大量的SQL语句,简化应用程序的开发。

2. 数据库性能优化:通过存储过程可以减少网络传输,提高数据库性能。

3. 数据库安全性:通过存储过程,可以实现对数据库的访问权限控制,提高数据库的安全性。

2.3 示例下面以一个简单的示例来说明存储过程的使用。

2.3.1 创建存储过程CREATE PROCEDURE `get_employee_by_department` (IN department_id INT)BEGINSELECT * FROM employee WHERE department_id = department_id;END2.3.2 调用存储过程CALL `get_employee_by_department`(1);2.4 优化技巧为了进一步提高存储过程的性能,可以采用以下优化技巧: 1. 减少存储过程的参数:过多的参数会增加网络传输的负担,应尽量减少存储过程的参数数量。

2. 避免长时间占用资源:存储过程应尽量快速执行,避免长时间占用数据库资源。

三、触发器3.1 概念触发器是与表相关联的特殊类型的存储过程,它在表的数据发生变化时自动执行。

触发器可以监视INSERT、UPDATE或DELETE等操作,并在这些操作发生时自动触发执行一段预定义的代码。

实验五 存储过程和触发器的使用

实验五存储过程和触发器的使用【目的要求】1、了解存储过程的基本概念和类型。

2、了解创建存储过程的T-SQL语句的基本语法。

3、了解查看、执行、修改和删除存储过程的T-SQL命令的用法。

4、了解触发器的基本概念和类型。

5、了解创建触发器的T-SQL语句的基本语法。

6、了解查看、修改和删除存储过程的T-SQL命令的用法。

【实验内容】内容一:存储过程的使用一、数据需求分析存储过程是一种数据库对象,为了实现某个特定任务,将一组预编译的SQL语句以一个存储单元的形式存储在服务器上,供用户调用,自动完成需要预先执行的任务。

存储过程在第一次执行时进行编译,然后将编译好的代码保存在高速缓存中便于以后调用,提高了代码的执行效率。

二、内容要点分析1、SQL SERVER支持五种类型的存储过程:系统存储过程、本地存储过程、临时存储过程、远程存储过程和扩展存储过程。

其中,系统存储过程是由系统提供的存储过程,可以作为命令执行各种操作。

系统存储过程定义在系统数据库master中,其前缀是sp_。

本地存储过程是指在用户数据库中创建的存储过程,这种存储过程完成特定数据库操作任务,不能以sp_为前缀。

2、只能在当前数据库中创建存储过程。

3、创建存储过程时,应指定所有输入参数和向调用过程或批处理返回的输出参数、执行数据库操作的编程语句和返回至调用过程或批处理以表明成功或失败的状态值。

4、创建存储过程的T-SQL语句CREATE PROC[EDURE] 存储过程名称[{ @参数名称数据类型 }] [,…n][WITH{ RECOMPILE|ENCRYPTION }]ASSQL语句序列说明:(1)RECOMPILE表明每次运行该过程时,将其重新编译。

(2)ENCRYPTION表示 SQL SERVER 加密SYSCOMMENTS表中包含CREATE PROCEDURE语句文本的条目。

注:必须将CREATE PROCEDURE语句放在单个批处理中。

实验六存储过程和触发器

实验六存储过程和触发器一、目的与要求1.掌握编写数据库存储过程的方法。

2.掌握建立数据库触发器的方法,通过实验观察触发器的作用和触发条件设置等相关操作。

二、实验准备1.了解编写存储过程和调用的T-SQL语法;2.了解触发器的作用;3.了解编写触发器的T-SQL语法。

三、实验内容(一)存储过程在studentdb数据库中建立存储过程getPractice,查询指定院系(名称)(作为存储过程的输入参数)中参与“实践”课程学习的所有学生学号、姓名、所学课程编号和课程名称,若院系不存在,返回提示信息。

提示:D」nfo表中存储了院系代码D_ID,而St_lnfo表中学号字段St_ID 的前两位与之对应,则D」nfo表与St_lnfo表之间的联系通过这两个字段的运算构成连接条件。

1.分别执行存储过程getPractice,查询“法学院”和“材料科学与工程学院”的学生中参与“实践”课程的所有学生学号、姓名、所学课程编号和课程名称create procedure getPractice@D_Name varchar(30)outputasbegi nif not exists(select *from D_I nfowhere D_Name= @D_Name)print'对不起,该院系不存在’elseselect st_in fo.St_ID,C」n fo.C_No,C_Namefrom s_c_i nfo inner joi n st_i nfo on st_i nfo.St_ID=s_c_i nfo.st_id inner joi n C_I nfo on s_c_i nfo.c_ no=C_I nfo.C_Nowhere st_in fo.St_ID in(select St_IDfrom st_i nfo join D_I nfo on D_In fo.D_ID =left(st_i nfo.St_ID,2) where C」n fo.C_Type=' 实践'and D_ln fo.D_Name= @D_Name)endgo|D_常prxta ■疋不.起,该箱>-f琴址*al>d9al«e? aT_iK.fd Sc^ID. C_Inf5 ■,. C^Nasic-frcai. ■ c JJZ^O -~~-=r OJ_Z:ST LZL±== sz 3 5~. I^-.s c ZXJ E D. - z j-J.j.r-:er _ = IT.C_Inf D M aF_e_infQ B C_DO-C_1G£n C_Hcwmtre 4c_inro.sc_iDjpele = E TO±zcx sjm jciri D■ 二上u 匚二D o D_ID i 3Z _Z3Lt=-. =z_ZD^ 2 1rfbUI IJlBdEa. C_T J^P RE-' 1an± i&_lA£a.p)_JfadM" (C_lamE:«nc£print 'Xl'TiLH谪僥爲不存左"selcn a^intc-St^ID G^IinTo ■ C_IPo.ClausetTon 9 c info 1 -7 _'T at inf o ar into ■旨耳11^9 ? Into,卸睪Jt)丄2_:e J.J Jlr. C IaXg g s c l^Tg . c oo^C I D J LD.□K D■rh« z e st._j_ZL.f 3 . St_12> —njs-el—et St_£Df EMi st_infe -D 1 -1 D_Inf o> cm D_InfQ. D_IB ■ r r T■ j»e_i nf a. St_IB r 3 wn e re c_ in ire ・G_T snw 宴践-■ ru_ i ntc 匚D_NWIC- t D_w«e©口=Xed ^etfxaetlC- * 学帕g=*D皿,对不起.谨院枭序存在,s&Jec:!:ar.^inrc . Sr ID. C Tore C Eg C M址尼ircm s匚JL二£□ 丄旦二亡二二_i■二st ■L二f■口as s± zzs-fa.^" ■LAat u AEL£Q . st idC_lnf& on a_c_infc. e_nci&C_lntciX_Sowbsic f g.(Kiter s^.ezrziL rt i^.fc _ j_r. □ Xaf?1二口D Izifc Z ZZ —Left st 1E£G St _ ID 2wtie£e C_in« .C 巧!PL'实踐'二計戈ii_inro. D_»Hm±- ftijkscMendgs “心—IT科学宇目□O2.利用系统存储过程sp_rename 将getPractice 更名为getPctStuexecute sp_re name getPractice , getPctStu尹■ dbc/t_^infc JXXV417J9>tLJd«ntdb - SQLQutryl «qh 寺- ax-ac^t a vp gat Practice . 口3•修改存储过程getPctStu,返回指定院系中参与实践课程的学生人次数, 并利用该存储过程以“法学院”为输入参数验证执行的结果alter procedure getPctStu@D_Name varchar(30)asbegi nif not exists(select *from D_I nfowhere D_Name= @D_Nameprint'对不起,该院系不存在’elseselect st_in fo.St_ID,C」n fo.C_No,C_Name,co unt (st_i nfo.St_ID) as 次数from s_c_i nfo inner joi n st_i nfo on st_i nfo.St_ID=s_c_i nfo.st_id inner joi n C_I nfo on s_c_i nfo.c_ no=C_I nfo.C_Nowhere st_in fo.St_ID in(select St_IDfrom st_i nfo join D_I nfo on D_In fo.D_ID =left(st_i nfo.St_ID,2) where C」n fo.C_Type=' 实践'and D_ln fo.D_Name= @D_Name)group by st_i nfo.St_ID,C」n fo.C_No,C_NameendGoexec getPctStu '法学院'Go血十口辭皿啊砒-SQlQutryL科I" MV|print '对不I九i枣FR系尸存守"el«select 3t_lntd. 5t_I D■ &_In£o-C_Ha f C_N^me. .. ; t 3t_infO-St_lDi 璋E/•.制惜f rw >_c_info n- - JD1rt_in£o cn«t_i!nfci-3't_I&-i s i B_in.£a ■|b_Ldinjier3°in C_lnfQ OT ■.c.ipfg ・*.!^<.玉旳£.13口■where st_in.Eci 5t_ID 1 naclest 5t_lnE K=-cjkn D_ln£e g &_I K£Q■ 1>_ID *W・殆VK t'lsfc.t l¥Ft-J实霸■"二 D D W WK- St_y«icEzu—P L-J!“七_丄1让<Z 上二_丄0匕_1±注右.口C l-BJV:ttndl3UT-xec j-tBnt5tu '迭学【完・G£>□茁黑血:占豐5l」D C-Nsw ' *「企t i出:;血[5 72001 ] 如忖U (IB罷伸a i3 2KHD5-:H0~ 57ZO13. 犬宇计刘曲気14.再修改存储过程getPctStu,返回指定院系中参与实践课程的学生人数注:“人数”和“人次数”是不同的,对某一学生而言,如果参与了多门实践课程,则“人次数”是指其参与的课程门数,而“人数”仍为1。

存储过程与触发器概念及应用考试

存储过程与触发器概念及应用考试(答案见尾页)一、选择题1. 存储过程是什么?A. 一种数据库对象,用于存储逻辑操作B. 一种数据库对象,用于存储查询语句C. 一种数据库对象,用于存储流程控制语句D. 一种数据库对象,用于存储数据2. 触发器的作用是什么?A. 在数据库中插入、更新或删除数据前自动执行的程序B. 在数据库中创建、修改或删除表C. 用于数据完整性约束D. 用于权限管理3. 存储过程和触发器都存放在以下哪个对象中?A. 数据库B. 表C. 索引D. 视图4. 存储过程可以通过哪种方式调用?A. SQL语句B. 外部程序调用C. 内部程序调用D. 以上都是5. 触发器的类型有哪几种?A. INSERT触发器B. UPDATE触发器C. DELETE触发器D. ALL触发器6. 触发器的工作原理是在哪个事件发生时执行?A. 数据库打开时B. 数据库关闭时C. 数据被插入、更新或删除时D. 用户登录时7. 如何创建一个存储过程?A. 使用CREATE PROCEDURE语句B. 使用CREATE TABLE语句C. 使用ALTER TABLE语句D. 使用CREATE INDEX语句8. 触发器中的IF语句用于做什么?A. 进行条件判断B. 控制触发器的执行流程C. 计算数据D. 存储数据9. 在触发器中,哪个关键字表示不执行任何操作?A. ALLB. EXCEPTIONC. THEND. ELSE10. 触发器的执行顺序是怎样的?A. 从内到外,从上到下B. 从内到外,从下到上C. 从外到内,从上到下D. 从外到内,从下到上11. 触发器的功能是什么?A. 处理数据库中的数据完整性问题B. 执行数据库中的批量操作C. 监控数据库中的数据变化,并在特定事件发生时自动执行操作D. 管理数据库中的用户权限12. 存储过程与触发器都是数据库对象,它们的主要区别是什么?A. 存储过程用于存储查询结果,而触发器用于执行操作B. 存储过程可以有输入参数,而触发器不能C. 存储过程是预编译的,可以提高数据库性能,而触发器是运行时执行的D. 触发器只能由用户触发,而存储过程可以由任何具有权限的用户调用13. 下列哪个不是存储过程的特点?A. 可以接收参数B. 可以有多个输出参数C. 只能在数据库内部执行D. 可以直接修改数据库中的数据14. 触发器通常与哪个对象相关联?A. 数据库表B. 数据库视图C. 数据库索引D. 数据库存储过程15. 在MySQL中,触发器的类型有哪些?A. INSERT触发器B. UPDATE触发器C. DELETE触发器D. SELECT触发器16. 触发器的工作原理是什么?A. 当对触发器关联的数据表进行指定类型的操作时,触发器自动执行预定义的操作B. 当数据库服务器启动时,触发器自动执行C. 当有新的连接连接到数据库时,触发器自动执行D. 当有用户登录到数据库时,触发器自动执行17. 如何在MySQL中创建一个存储过程?A. 使用CREATE PROCEDURE语句B. 使用CREATE FUNCTION语句C. 使用ALTER PROCEDURE语句D. 使用ALTER FUNCTION语句18. 触发器中可以使用哪些类型的条件判断?A. IF...ELSE语句B. CASE语句C. THEN...ELSE语句D. ALL...IN语句19. 触发器可以分为几种类型?(多选)A. INSERT触发器B. UPDATE触发器C. DELETE触发器D. SELECT触发器20. 存储过程和触发器都存放在哪种类型的数据库对象中?A. 表B. 序列C. 索引D. 视图21. 存储过程的类型有哪几种?A. 标准存储过程B. 用户定义存储过程C. 扩展存储过程D. 内置存储过程22. 下列哪个不是存储过程中的控制结构?A. IF...ELSEB. WHILEC. CASED. GOTO23. 触发器在什么情况下会被触发?A. 当表被添加或修改时B. 当数据库连接打开时C. 当用户登录时D. 当执行特定SQL语句时24. 如何使用存储过程?A. 使用CREATE PROCEDURE语句创建存储过程B. 使用ALTER PROCEDURE语句修改存储过程C. 使用DROP PROCEDURE语句删除存储过程D. 以上都是25. 触发器的主要优点是什么?A. 提高数据库性能B. 减少数据库维护成本C. 增加数据库安全性D. 以上都是26. 触发器的主要缺点是什么?A. 可能导致数据库性能下降B. 可能导致数据库死锁C. 可能导致数据库崩溃D. 可能导致数据库锁定二、问答题1. 什么是存储过程?请简述其特点。

数据库实验存储过程、触发器和函数实验

存储过程、触发器和用户自定义函数实验实验内容一练习教材中存储过程、触发器和用户自定义函数的例子。

教材中的BookSales数据库,在群共享中,文件名为BookSales.bak。

实验内容二针对附件1中的教学活动数据库,完成下面的实验内容。

1、存储过程(1)创建一个存储过程,该存储过程统计“高等数学”的成绩分布情况,即按照各分数段统计人数。

执行存储过程:exec countpeople(2)创建一个存储过程,该存储过程有一个参数用来接收课程号,该存储过程统计给定课程的平均成绩。

执行存储过程:exec avg_score'C602'(3)创建一个存储过程,该存储过程将学生选课成绩从百分制改为等级制(即A、B、C、D、E)。

执行存储过程:exec alterscore(4)创建一个存储过程,该存储过程有一个参数用来接收学生姓名,该存储过程查询该学生的学号以及选修课程的门数。

执行存储过程:exec select_courses'李强'(5)创建一个存储过程,该存储过程有两个输入参数用来接收学号和课程号,一个输出参数用于获取相应学号和课程号对应的成绩。

执行存储过程:declare@score smallintexec select_socre'98601','C602',@score outputprint'成绩是'+convert(char(2),@score)+'分'2、触发器(1)为study表创建一个UPDATE触发器,当更新成绩时,要求更新后的成绩不能低于原来的成绩。

创建完触发器尝试进行更新数据:update study set score=60 where sno='98601'and cno='C601'执行完之后查询结果发现成绩仍然是90select score from study where sno='98601'and cno='C601'再更新一个高于90分的成绩则可以成功update study set score=91 where sno='98601'and cno='C601'select score from study where sno='98601'and cno='C601'(2)为study表创建一个DELETE触发器,要求一次只能从study表中删除一条记录。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


1.3检索至少有两个学生选修的课程名称
1.3、检索至少有两个学生选修的课程名称
选修课程名称() 人数(SC.Sno统计)
先组合两个来源表

1.3.1学生的选修课程详细情况(课程名称、学号) select cn,sno from c,sc where o=o
统计人数

1.3.2学生的选修课程情况(课程名称、人数) select cn,count(sno) from c,sc where o=o group by cn having count(sno)>1

举例五:

5、求年龄大于男同学平均年龄的女学生姓名和年龄 男同学平均年龄/姓名和年龄(女学生)
根据相关数据判断 1、SQL嵌套?2、可能用到的SQL?


5.1求男同学平均年龄 select avg(age) from s where sex=‘男’ 5.2求年龄大于(步骤1年龄)的女学生姓名和年龄 select sn,age from s where age>(select avg(age) from s where sex=‘男’)
3、需要分组吗? 4、需要排序吗?
举例一:题2/4参考

p80
1.1学生的选修课程情况(课程号、人数) 选修课程号(o) 人数(SC.Sno统计) select cno,count(sno) from sc group by cno 统计值有多种情况时,必须分组;分组列为非统计列

1.2检索至少有两个学生选修的课程号 select cno,count(sno) from sc group by cno having count(sno)>1 “至少有两个学生”这条件是在分组前还是分组后?
实验复习

触发器
触发器举例
1临时表 2插入触发器 3删除触发器 4修改触发器

1 临时表

触发器生成的两个临时表: Inserted 表和deleted表
作用: 可以在SQL语句中引用,用于触发器条 件测试,表内容不能修改。
临时表和SQL更新语句的关系:
1)INSERT语句:Inserted表。 2)UPDATE语句:deleted表,Insert 表。 3)DELETE语句:deleted表。
过滤条件
举例二:题3参考

2、检索没有女同学选修的课程号 女同学(S.Sex) 选修的课程号 (o)
先组合两个来源表

2.1学生选课详细信息(课程号、学号、性别) select s.sex,s.sno,o from s,sc where s.sno=sc.sno 2.2有女同学选课的课程号 select distinct o from s,sc where s.sno=sc.sno and s.sex=‘女’
举例四:题8/9参考

4、统计学分为2的每门课程学生平均年龄 学分(C.CT=2)/每门课/年龄(S.Age)
根据相关数据判断可能用到的SQL 多表组合连接+条件+分组统计
4.1学分为2的课程所选学生年龄(组合表数据) Select age,o,sc.sno from s,sc,c where s.sno=sc.sno and o=o and ct=2; 4.2求平均年龄 Select avg(age),o from s,sc,c where s.sno=sc.sno and o=o and ct=2 group by o

举例二(方法2 ):3
注:1、与Inserted表无关。 2、只是在带有触发器时才出现Deleted表。
2插入触发器

往学生表S插入数据时,如果年龄为空时,设定为19
确定目标表;什么时候动作;相关临时表;动作内容



1、取出插入记录的年龄值(取值) 取值 select age from inserted; 赋值 2、把取出值赋给局部变量(赋值) 判断 DECLARE @cAge int; 动作 select @cAge=age from inserted; 3、修改年龄为19(动作) update s set age=19 where sno=? 4、取出插入记录的主键值 DECLARE @cSno char(2);--类型和数据库定义一致 select @cSno=sno from inserted;
存储过程举例
定义输入输出变量,写出存储过程


2、写出存储过程,假设值用输入变量定义 Create proc proc_avgScore @Cname varchar(20) --和实际数据库定义一致 As select s.sno,s.sn,sc.score from s,sc,c where s.sno=sc.sno and o=o and = @Cname 3、运行测试 EXEC proc_avgScore 'C语言'
定义 赋值om S; delete from S where sno='S8'; select * from S; delete from S where sno='S1'; select * from S;
4修改触发器
确定目标表;什么时候动作;相关临时表;动作内容
2插入触发器

运行测试(删除预先设定的CHECK约束) select * from S; insert into S(SNO,SN,SEX,AGE,DEPT) values('S7','test7','男',17,'计算机'); insert into S(SNO,SN,SEX,DEPT) values('S8','test8','男','计算机'); select * from S;
Insert 语句

目标表
Inserted表
注:1、与Deleted表无关。 2、只是在带有触发器时才出现Inserted表。
Update 语句

目标表 ①
Inserted表 Deleted表
注:只是在带有触发器时才出现Inserted表 和Deleted表。
Delete 语句
① 目标表 Deleted表

对学生成绩进行修改,如果修改为负值时, 提示‘不能为负值’并取消修改 Create Trigger U_S on SC for update As --取出被修改记录修改后的成绩值 DECLARE @cScore smallint; select @cScore=SCORE from inserted; --判断修改后成绩是否为负值 If @cScore<0 Begin Rollback Transaction;--撤销修改 Print '不能为负值'; end
定义 赋值 判断 动作
4修改触发器
测试(删除预先设定的CHECK约束) Select * from SC where SNO='S5' and CNO='C2' Update SC set SCORE=-89 where SNO='S5' and CNO='C2' Select * from SC where SNO='S5' and CNO='C2'
实验复习

存储过程
存储过程举例

p254
建立proc_avgScore 存储过程。根据指定课程名称 查询课程的学生成绩信息(学号、姓名、成绩)。
确定输入输出变量,写出SQL语句

1、假设课程名为‘x’,写出相关SQL语句 学号(s.sno)/姓名(s.sn)/成绩(sc.score)/课程名称 () select s.sno,s.sn,sc.score from s,sc,c where s.sno=sc.sno and o=o and =‘x’

2.3没有女学生选课的课程号 select distinct cno from sc where cno not in(select distinct o from s,sc where s.sno=sc.sno and s.sex=‘女’) select cno from c where cno not in(select distinct o from s,sc where s.sno=sc.sno and s.sex=‘女’)
举例六:

6、求年龄小于所有男同学年龄的女学生姓名和年龄 所有男同学年龄/女学生姓名和年龄
所有/任何一个(All/ Any)


6.1所有男同学年龄 Select distinct age from s where sex=‘男’ 6.2女学生姓名和年龄 Select sn,age from s where sex=‘女’ And age>all(Select distinct age from s where sex=‘男’)
2插入触发器
确定目标表;什么时候动作;相关临时表;动作内容

定义 往学生表S插入数据时,如果年龄为空时,设定为19 赋值 Create trigger I_S on S 判断 For insert 动作 as -- 取出插入记录的年龄值,主键值 DECLARE @cAge int; DECLARE @cSno char(2); select @cAge=age, @cSno=sno from inserted; --判断是否为空值 If @cAge is null Begin update s set age=19 where sno=@cSno --修改年龄 end

定义 赋值 判断 动作
相关文档
最新文档