- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
试验8数据完整性试验
实验 9:数据完整性实验
实验目的
本实验的目的是通过实验使学生加深对数据完整性的理解,学会创建和使用触发器。
相关知识
SQL Server实现数据完整性的具体方法有4种:约束、缺省、规则和触发器。其中约束和缺省在实验一中已接触过。本实验重点学会创建和使用触发器。
触发器是实施复杂完整性的特殊类型的存储类型。触发器不需要专门语句调用,当对它所保护数据进行修改时自动激活,以防止对数据进行不正确,未授权或不一致的修改。
创建触发器的语法为:
CREATE TRIGGER 触发器 ON 表名
[WITH ENCRYPTION]
FOR {[DELETE][,][INSERT][,][UPDATE]}
[WITH APPEND]
[NOT FOR REPLICATION]
AS SQL 语句组
其中:
WITH ENCRYPTION 为加密选项。
DELETE 选项为创建DELETE 触发器。DELETE触发器的作用是当对表执行DELETE操作时触发器被激活,并从指定表中删除元组,同时将删除的元组放入一个特殊的逻辑表(deleted表)中。触发器的动作可以检查delete表中的数据,以确定下一步该如何处理。
INSERT选项为创建INSERT触发器。INSERT触发器在对指定表中执行插入数据操作时激活,激活后将插入表中的数据拷贝并送入一个特殊的逻辑表(inserted 表)中,触发器会根据INSERT表中的值决定如何处理。
UPDATE选项为创建UPDATE触发器。UPDATE触发器仅在对指定表中进行更新数据操作时激活。UPDATE触发器激活后把将要被更新的原数据移入delete表中再将要被更新后的新数据的备份送入insert表中,UPDATE触发器对delete和inserted表进行检查,并决定如何处理。
NOT FOR REPLICATION 选项说明当一个复制过程在修改一个触发器表时,与该表相关联的触发器不能被执行。
一个触发器只适用于一个表,每个表最多只能有三个触发器,它们分别是INSERT、UPDATE和DELETE触发器。触发器仅在实施数据完整性和处理业务规则时使用。
实验内容
在企业管理器中创建触发器
在企业管理器中,由服务器开始逐步扩展到触发器所属表的数据库(本例为学生选课数据库),打开表文件夹,在表窗口中用鼠标右击触发器所属的表(本例为选课表)。
在弹出菜单上选择“所有任务”“管理触发器”项,则弹出如图所示的触发器属性对话框。
2、创建一个insert触发器,当在选课表中插入一条新记录时,给出‘你已经插入了一条新记录!!!’的提示信息。
程序代码如下:
create trigger stuinsert on 选课
for insert
as
declare @msg char(50)
set @msg=’ 你已经插入了一条新记录!!!’
print @msg
打开选课表,往选课表输入一条任意数据,查看结果。
3、在学生表上建立触发器trg1,当修改学生表中某个学生的学号时,如果选课表中存在该学生的选修记录时,则修改该同学的学号。
4、在选课表上建立触发器trg2,当插入一行数据时,如果学号(Stid)和课程号(cid)错误则取消插入操作。
5、创建一个insert触发器,当在选课表中插入一条新记录时,学号和课程号必须是已经存在,且成绩应该在0----100之间。
程序代码如下:
create trigger scinsert on 选课
for insert
as
declare @gradevalue real
set @gradevalue=(select grade from inserted)
print ‘触发器开始工作………………’
if not exists(select 学号 from inserted
where 学号 in(select 学号 from pupil))
begin
print ‘无此学生的编号,请重新确认!!!’
rollback transaction
end
else
begin
if not exists(select 课程号 from inserted where 课程号 in(select 课程号 from course))
begin
print ‘无此课程的编号,请重新确认!!!’
rollback transaction
end
else
begin
if @gradevalue0 or @gradevalue100
begin
您可能关注的文档
最近下载
- 湖南省长沙市长郡雨花外国语学校2022年人教版小升初考试数学试卷(一)(含答案解析).docx VIP
- 福建省福州一中自主招生考试数学试卷.docx VIP
- 《企业内部控制》第18章 内部信息传递.pptx VIP
- 小学英语特色课程.doc VIP
- 肱骨骨折的护理查房.pptx VIP
- 浙江省台州市椒江区2023-2024学年八年级下学期期末数学试题(含答案).docx VIP
- 2025中考初中英语1600单词速记完整版(复习必背).docx
- 2025年哈尔滨供水集团有限责任公司人员招聘笔试备考试题及答案解析.docx VIP
- (正式版)S-H∕T3507-2024 石油化工钢结构工程施工及验收规范.docx VIP
- JT∕T 1094-2016 营运客车安全技术条件.pdf VIP
文档评论(0)