数据库原理 数据的完整性 实验报告.docx
- 文档编号:5380199
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:16
- 大小:267.88KB
数据库原理 数据的完整性 实验报告.docx
《数据库原理 数据的完整性 实验报告.docx》由会员分享,可在线阅读,更多相关《数据库原理 数据的完整性 实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
数据库原理数据的完整性实验报告
***大学计算机科学与信息学院
软件工程系上机实验报告
《数据库原理》实验报告
题目
实验8数据的完整性
***
班级
***
日期
***
实验环境:
SQLServer2000
一、实验目的
熟悉通过SQL对数据进行完整性控制,通过实验加深对数据完整性的理解。
⏹相关知识
触发器是实施复杂完整性的一种机制。
触发器不需要专门的语句调用,当对它所保护数据进行修改时由DBMS自动激活,以防止对数据进行不正确,未授权或不一致的修改。
创建触发器的语法为:
CREATETRIGGER<触发器>ON<表名>
[WITHENCRYPTION]
FOR{[DELETE][,][INSERT][,][UPDATE]}
[WITHAPPEND]
[NOTFORREPLICATION]
AS
其中:
1)WITHENCRYPTION为加密选项。
2)DELETE选项为创建DELETE触发器。
DELETE触发器的作用是当对表执行DELETE操作时触发器被激活,并从指定表中删除元组,同时将删除的元组放入一个特殊的逻辑表(delete表)中。
触发器的动作可以检查delete表中的数据,以确定下一步该如何处理。
3)INSERT选项为创建INSERT触发器。
INSERT触发器在对指定表中执行插入数据操作时激活,激活后将插入表中的数据拷贝并送入一个特殊的逻辑表(inserted表)中,触发器会根据INSERT表中的值决定如何处理。
4)UPDATE选项为创建UPDATE触发器。
UPDATE触发器仅在对指定表中进行更新数据操作时激活。
UPDATE触发器激活后把将要被更新的原数据移入delete表中,再将要被更新后的新数据的备份送入inserted表中,UPDATE触发器对delete和inserted表进行检查,并决定如何处理。
5)NOTFORREPLICATION选项说明当一个复制过程在修改一个触发器表时,与该表相关联的触发器不能被执行。
一个触发器只适用于一个表,每个表最多只能有三个触发器,它们分别是INSERT、UPDATE和DELETE触发器。
触发器仅在实施数据完整性和处理业务规则时使用。
二、实验容
本实验的容为使用SQL对数据进行完整性控制(关系数据库的三类完整性、CHECK短语、CONSTRAINT子句、触发器)。
用实验证实,当操作违反了完整性约束条件时,系统如何处理的。
认真完成以下题目,按要求填写实验报告,记录所有实验用例。
(1)打开SQLServer2000的查询分析器,用DDL语句建立如下三个表。
表student1:
字段名
类型
长度
含义
约束
Sno
Char
10
学号
主码(约束名:
STU_PK)
Sname
Char
20
非空(约束名:
STU_U1)
Ssex
Char
2
性别
‘男’或’女’(约束名:
STU_C1)
Sage
Int
年龄
18到30(约束名:
STU_C2)
Sdept
Char
10
所在系
表course1:
字段名
类型
长度
含义
约束
Cno
Char
10
课程号
主码(约束名:
COU_PK)
Cname
Char
20
课程名
唯一(约束名:
COU_C1)
Cpno
Char
2
先行课
Ccredit
Int
学分
表SC1:
字段名
类型
长度
含义
约束
Sno
Char
10
学号
主码(约束名:
SC_PK)
外码(参照student1的Sno,约束名:
SC_FK1)
Cno
Char
20
课程号
主码(约束名:
SC_PK)
外码(参照course1的Cno,约束名:
SC_FK2)
Grade
Char
2
成绩
createtablestudent1(
Snochar(10),
Snamechar(20)
constraintSTU_U1NOTNULL,
Ssexchar
(2)
constraintSTU_C1CHECK(Ssexin('男','女')),
Sageint
constraintSTU_C2check(Sagebetween18and30),
Sdeptchar(10)
constraintSTU_PKPRIMARYKEY(Sno));
createtablecourse1(
Cnochar(10),
Cnamechar(20)
constraintCOU_C1UNIQUE,
Cpnochar
(2),
Ccreditint
constraintCOU_PKPRIMARYKEY(Cno));
createtableSC1(
Snochar(10),
Cnochar(10),
GradeCHAR
(2),
constraintSC_PKPRIMARYKEY(Sno,Cno),
constraintSC_FK1FOREIGNKEY(Sno)REFERENCESstudent1(Sno),
constraintSC_FK2FOREIGNKEY(Cno)REFERENCEScourse1(Cno),
);
(2)插入如下数据,什么原因导致某些数据不能正确插入?
Sno
Sname
Ssex
Sage
Sdept
95001
黎小明
男
16
CS
95002
小华
男
45
CS
95003
王小菲
女
26
MA
95004
王小凌
女
20
IS
95004
小烨
男
27
IS
insert
intostudent1(Sno,Sname,Ssex,Sage,Sdept)
VALUES('95001','黎小明','男',16,'CS');
insert
intostudent1(Sno,Sname,Ssex,Sage,Sdept)
VALUES('95002','小华','男',45,'CS');
insert
intostudent1(Sno,Sname,Ssex,Sage,Sdept)
VALUES('95003','王小菲','女',26,'MA');
insert
intostudent1(Sno,Sname,Ssex,Sage,Sdept)
VALUES('95003','王小凌','女',20,'IS');
insert
intostudent1(Sno,Sname,Ssex,Sage,Sdept)
VALUES('95003','小烨','男',27,'IS');
原因:
年龄不在约束条件,Sno不能重复插入。
学号重复。
Cno
Cname
Ccredit
1
高等数学
4
2
大学英语
4
3
计算机导论
3
4
计算机网络
3
5
计算机网络
3
insert
intocourse1(Cno,Cname,Ccredit)
VALUES('1','高等数学','4');
insert
intocourse1(Cno,Cname,Ccredit)
VALUES('2','大学英语','4');
insert
intocourse1(Cno,Cname,Ccredit)
VALUES('3','计算机导论','3');
insert
intocourse1(Cno,Cname,Ccredit)
VALUES('4','计算机网络','3');
insert
intocourse1(Cno,Cname,Ccredit)
VALUES('5','计算机网络','3');
原因:
Cname唯一,不能重复插入。
Sno
Cno
Grade
95001
1
80
95001
2
90
95003
1
95
95004
1
75
95004
2
95
insert
intoSC1(Sno,Cno,Grade)
VALUES('95001','1',80);
insert
intoSC1(Sno,Cno,Grade)
VALUES('95001','2',90);
insert
intoSC1(Sno,Cno,Grade)
VALUES('95003','1',95);
insert
intoSC1(Sno,Cno,Grade)
VALUES('95004','1',75);
insert
intoSC1(Sno,Cno,Grade)
VALUES('95004','2',95);
(3)给SC1表添加一个约束,约束名为SC1_C1,该约束限制Grade的取值围是0到100。
altertableSC1
addconstraintSC1_C1check(Gradebetween0and100);
(4)更改约束STU_C2,使得年龄的围是15到50。
altertablestudent1
dropconstraintSTU_C2;
ALTERTABLEstudent1
addconstraintSTU_C2CHECK(Sagebetween0and100);
(5)对SC1表设计一个触发器,该触发器保证每个学生所选课程的总学分不超过12分。
createtriggerInsert_SC1ondbo.SC1
forinsert,update
asif(12<=(selectsum(Ccredit)
fromSC1,Course1,Inserted
whereSC1.Cno=Course1.CnoandSC1.Sno=(selectSnofrominserted)))
begin
raiserror('不能选!
',0,0)
rollbacktransaction
endreturn;
(6)验证触发器。
insert
intoSC1
values('200215121','1',92)
insert
intoSC1
values('200215121','2',92)
insert
intoSC1
values('200215121','3',92)
三、实验步骤
1.在查询分析器中完成
(1)到(4)小题。
2.在企业管理器中创建触发器:
(1)在企业管理器中,由服务器开始逐步扩展到触发器所属表的数据库,打开表文件夹,在表窗口中用鼠标右击触发器所属的表(本例为选课表即SC1)。
(2)在弹出菜单上选择“所有任务”“管理触发器”项,则弹出如图7-1所示的触发器属性对话框。
图7-1触发器属性对话框
如果要新建触发器,在文本[T]的文本框中输入创建触发器的SQL语句(见实验容),单击“检查语法”按钮进行语法的检查,检查无误后,单击确定按钮。
如图7-2所示,于是执行对基本表SC1的插入和更新操作的时候,都会自动显示表SC1中的容。
请在查询分析器中进行验证该触发器。
图7-2触发器语法检查对话框
(3)如果要修改触发器,则在“名称”弹出项中选择要修改的触发器名(本例为SC_inserted),然后在文本[T]的文本框中对已有的容进行修改,检查无误后单击“确定”按钮。
如图7-3所示,将该触发器代码修改为检查插入、更新、删除操作时触发。
请在查询分析器中进行验证该触发器。
图7-3修改触发器语法检查对话框
(4)如果要删除触发器,则在“名称”弹出项中选择要删除的触发器名(本例为SC_inserted),并检查文本[T]的文本框中的容,看是否选得正确,最后单击“删除”按钮。
如图7-4所示。
图7-4删除触发器对话框
3.在查询分析器中插入某个学生的多个选课记录,设计和验证触发器是否能够保证该学生的所有课程的总学分不能超过12分。
三、出现的问题及其解决方案(列出遇到的问题和解决办法,列出没有解决的问题)
问题1:
在关系表时,提示提示出错。
分析原因:
输入的数据违反了用户定义的数据的完整性。
解决办法:
将数据改为定义围的数据。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库原理 数据的完整性 实验报告 数据库 原理 数据 完整性 实验 报告