数据库实验八_第1页
数据库实验八_第2页
数据库实验八_第3页
数据库实验八_第4页
数据库实验八_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机科学与技术系 实 验 报 告专业名称 软件工程 课程名称 数据库原理与设计 项目名称 触发器及应用 班 级 学 号 姓 名 同组人员 无 实验日期 2014/12/23 一、实验目的与要求: (简述本次实验要求达到的目的,涉及到的相关知识点,实验的具体要求。)1复习和掌握教材5.6节内容。2预习SQL Server软件的使用和SQL Server中触发器的概念、创建和执行过程。3准备好上机所需的程序。4学习触发器的使用,加深对触发器功能和作用的理解。5体会触发器执行的时机。二、实验内容(根据本次实验项目的具体任务和要求,完成相关内容,可包括:实验目的、算法原理、实验仪器、设备选型及连线图

2、、算法描述或流程图、源代码、实验运行步骤、关键技术分析、测试数据与实验结果、其他 )(1)为选课表分别建立插入和更新触发器,如果当前学生累计不及格门数达到5则给出警示信息。(2)为课程表分别建立插入和更新触发器来建立约束规则:“专业基础”课的教师必须为“教授”或“副教授”,如果不满足约束则拒绝操作,并给出错误信息。(3)自行再分别设计23个触发器(在实验报告中要准确描述功能需求)。(4)设计并执行相关的操作,体会DML触发器的效果和作用。实验原理 1. 建立触发器的语句是:CREATE TRIGGER schema_name.trigger-nameON table |viewFOR INSE

3、RT | UPDATE | DELETE ASIF UPDATE (column) AND | OR UPDATE (column)sql-statementcreate trigger xuankeon 选课for insert,updateas declare amount int, number char(8)select number=学号 from insertedif number is not nullbeginselect amount=(select count(*) from 选课 where 成绩 <60 and 学号=number)if amount>=5

4、begin raiserror('此学生的累计不及格科目已达到门',16,10) rollback transactionendend插入操作insert into 选课 values('12001','6','55')insert into 选课 values('12001','7','59')insert into 选课 values('12001','8','30')insert into 选课 values('12001

5、','9','56')更新操作update 选课 set 成绩=66where 学号=12001 and 课程编号='6'update 选课 set 成绩=45where 学号=12001 and 课程编号='8'create trigger kechengbiaoon 课程for insert,updateas declare professional char(10)select professional=职称from 教师where 教师编号 in( select 责任教师from 课程where 课程性质='

6、;专业基础')if professional not in('教授','副教授')beginraiserror ('操作有误,禁止!',16,1)rollback transactionendinsert into 课程 values ('11','c+','14001',8,'专业基础')insert into 课程 values ('12','计算机网络','14002',8,'公共基础')update 教师

7、 set 职称='教授'where 教师编号=14006update 课程 set 课程性质='专业基础'where 责任教师=14008三、实验分析与小结:(实验过程中的问题分析、产生的原因以及解决方法;实验结果分析; 有待优化思路)问题一:消息提示end 附件有语法错误。产生原因:一个if 条件对应一个end 语句。但同时,if 条件语句后面必须有begin语句,否则会报错如下图情况。解决方法:添加 begin 语句,ifbeginend语句要同时存在。问题二:触发器命令可以成功执行。但不管如何插入或更新某同学的一项或几项成绩(分数<60),消息窗口始

8、终没有警告出现,反而出现如下图所示结果。 产生原因:观察上图消息窗口提示查询已经成功执行。这说明,命令成功执行后,进行插入或更新操作时,程序并没有启动触发器,而是只执行了语句中的查询命令后就终止了。可能是所编语句中无返回值导致。解决方法:对比书上例7-14发现问题出现在select number from inserted 这条语句。声明的学号变量number无对应的值,修改语句select number=学号 from inserted成功解决。1、 实验结果分析;有待优化思路。结果分析,当出现警告时,程序执行插入或更新操作的结果在课程表中没有出现,说明触发器约束成功。因为触发器是对课程表执行约束操作,故当在教师表中对课程性质为“专业基础”的授课教师的职称进行修改,update 教师 set 职称='教授'where 教师编号=0101不会触动触发器。 四、其它思考题:1 为什么要使用触发器?触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制用比CHECK约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论