数据库实验八文档格式.docx
- 文档编号:22494794
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:8
- 大小:90.54KB
数据库实验八文档格式.docx
《数据库实验八文档格式.docx》由会员分享,可在线阅读,更多相关《数据库实验八文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
)
1.复习和掌握教材5.6节内容。
2.预习SQLServer软件的使用和SQLServer中触发器的概念、创建和执行过程。
3.准备好上机所需的程序。
4.学习触发器的使用,加深对触发器功能和作用的理解。
5.体会触发器执行的时机。
二、实验内容
(根据本次实验项目的具体任务和要求,完成相关内容,可包括:
实验目的、算法原理、实验仪器、设备选型及连线图、算法描述或流程图、源代码、实验运行步骤、关键技术分析、测试数据与实验结果、其他)
(1)为选课表分别建立插入和更新触发器,如果当前学生累计不及格门数达到5则给出警示信息。
(2)为课程表分别建立插入和更新触发器来建立约束规则:
“专业基础”课的教师必须为“教授”或“副教授”,如果不满足约束则拒绝操作,并给出错误信息。
(3)自行再分别设计2~3个触发器(在实验报告中要准确描述功能需求)。
(4)设计并执行相关的操作,体会DML触发器的效果和作用。
实验原理
1.建立触发器的语句是:
CREATETRIGGER[schema_name].trigger-name
ON{table|view}
FOR{INSERT|UPDATE|DELETE}
AS
[IFUPDATE(column)[{AND|OR}UPDATE(column)…]]
sql-statement
createtriggerxuanke
on选课
forinsert,update
as
declare@amountint,@numberchar(8)
select@number=学号frominserted
if@numberisnotnull
begin
select@amount=(selectcount(*)
from选课
where成绩<
60and学号=@number)
if@amount>
=5
begin
raiserror('
此学生的累计不及格科目已达到门'
16,10)
rollbacktransaction
end
插入操作
insertinto选课values('
12001'
'
6'
55'
7'
59'
8'
30'
9'
56'
更新操作
update选课set成绩=66
where学号=12001and课程编号='
update选课set成绩=45
createtriggerkechengbiao
on课程
declare@professionalchar(10)
select@professional=职称
from教师
where教师编号in(select责任教师
from课程
where课程性质='
专业基础'
if@professionalnotin('
教授'
副教授'
raiserror('
操作有误,禁止!
'
16,1)
rollbacktransaction
insertinto课程values('
11'
c++'
14001'
8,'
12'
计算机网络'
14002'
公共基础'
update教师set职称='
where教师编号=14006
update课程set课程性质='
where责任教师=14008
三、实验分析与小结:
(实验过程中的问题分析、产生的原因以及解决方法;
实验结果分析;
有待优化思路)
问题一:
消息提示end附件有语法错误。
产生原因:
一个if条件对应一个end语句。
但同时,if条件语句后面必须有begin语句,否则会报错如下图情况。
解决方法:
添加begin语句,if—begin—end语句要同时存在。
问题二:
触发器命令可以成功执行。
但不管如何插入或更新某同学的一项或几项成绩(分数<
60),消息窗口始终没有警告出现,反而出现如下图所示结果。
观察上图消息窗口提示查询已经成功执行。
这说明,命令成功执行后,进行插入或更新操作时,程序并没有启动触发器,而是只执行了语句中的查询命令后就终止了。
可能是所编语句中无返回值导致。
对比书上例7-14发现问题出现在select@numberfrominserted这条语句。
声明的学号变量@number无对应的值,修改语句select@number=学号frominserted成功解决。
1、实验结果分析;
有待优化思路。
结果分析,当出现警告时,程序执行插入或更新操作的结果在课程表中没有出现,说明触发器约束成功。
因为触发器是对课程表执行约束操作,故当在教师表中对课程性质为“专业基础”的授课教师的职称进行修改,update教师set职称='
where教师编号=0101
不会触动触发器。
四、其它
思考题:
1.为什么要使用触发器?
触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。
触发器可以强制用比CHECK约束定义的约束更为复杂的约束。
与CHECK约束不同,触发器可以引用其它表中的列。
例如,触发器可以使用另一个表中的SELECT比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。
触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。
一个表中的多个同类触发器(INSERT、UPDATE或DELETE)允许采取多个不同的对策以响应同一个修改语句。
得分(百分制)
感谢下载!
欢迎您的下载,资料仅供参考
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实验