数据库4实验报告.docx
- 文档编号:26841046
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:17
- 大小:335.38KB
数据库4实验报告.docx
《数据库4实验报告.docx》由会员分享,可在线阅读,更多相关《数据库4实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
数据库4实验报告
太原理工大学学生实验报告
学院名称
软件学院
专业班级
软件1115
学号
2011005569
学生姓名
郭泽华
实验日期
月日
成绩
课程名称
数据库系统原理
实验题目
实验三数据完整性
一、实验目的和要求(必填)
(1)了解SQLSerer数据库系统中数据完整性控制的基本方法
(2)熟练掌握常用CREATE或ALTER在创建或修改表时设置约束
(3)了解触发器的机制和使用
(4)验证数据库系统数据完整性控制
二、实验内容和原理
结合school数据库中的各个表,设置相关的约束,要求包括主键约束、外键约束、唯一约束、检查约束、非空约束等,掌握各约束的定义方法。
设置一个触发器,实现学生选课总学分的完整性控制,了解触发器的工作机制。
设计一些示例数据,验证完整性检查机制。
3.1要求包括如下方面的内容:
使用SQL语句设置约束
使用CREATE或ALTER语句完成如下的操作,包括:
1.设置各表的主键约束
2.设置相关表的外键
3.设置相关属性的非空约束、默认值约束、唯一约束
4.设置相关属性的CHECK约束
3.2使用触发器
创建一个触发器,实现如下的完整性约束:
(1)当向SC表中插入一行数据时,自动将学分累加到总学分中。
(2)记录修改学分的操作。
3.3检查约束和触发器
分别向相关表插入若干条记录,检查你设置的完整性约束是否有效:
1.插入若干条包含正确数据的记录,检查插入情况
2.分别针对设置的各个约束,插入违反约束的数据,检查操作能否进行
3.向SC表插入若干行数据,检查触发器能否实现其数据一致性功能。
三、主要仪器设备(必填)
HP6460SQLSERVER2008
四、方法与实验步骤(可选)
一、声明完整性约束
创建学生选课数据库TEST,包括三个基本表,其中Student表保存学生基本信息,Course
表保存课程信息,SC表保存学生选课信息,其结构如下表:
表1.Student表结构
列名称
用途
类型
长度
约束
备注
Sno
学号
字符
8
主键
Sname
姓名
字符
8
非空
Ssex
性别
字符
2
{男,女}
Sage
年龄
整型
Sdept
所在系
字符
20
Sclass
班级
字符
4
非空
Stotal
总学分
整型
默认值0
表2.Course表结构
列名称
用途
类型
长度
约束
备注
Cno
课程号
字符
4
主键
Cname
课程名
字符
40
非空,唯一
Cpno
先修课程号
字符
4
外键
引用本表的Cno
Ccredit
学分
整型
表3.SC表结构
列名称
用途
类型
长度
约束
备注
Sno
学号
字符
8
主码属性,外键
引用Student的Sno
Cno
课程号
字符
4
主码属性,外键
引用Course的Cno
Grade
成绩
整型
0<=成绩<=100
1.创建基本表及约束
(1)创建Student表
CREATETABLEStudent
(SnoCHAR(8)PRIMARYKEY,
SnameCHAR(8)NOTNULL,
SsexCHAR
(2)CHECK(Ssexin('男','女')),
SageSMALLINT,
SdeptCHAR(20),
SclassCHAR(4)NOTNULL,
StotalsmallintDEFAULT0
);
z掌握主键约束、非空约束、CHECK约束、默认值的定义格式。
(2)创建Course表
CREATETABLECourse
(CnoCHAR(4)CONSTRAINTFK_CoursePRIMARYKEY,
CnameCHAR(40),
CpnoCHAR(4),
CcreditSMALLINT
);
(3)创建SC表
CREATETABLESC
(SnoCHAR(8)FOREIGNKEY(Sno)REFERENCESStudent(Sno),
CnoCHAR(4),
GradeSMALLINTCONSTRAINTSC_CHECKCHECK(Grade>0ANDGrade<100),
PRIMARYKEY(Sno,Cno),
CONSTRAINTFK_SCFOREIGNKEY(Cno)REFERENCESCourse(Cno)
);
1.掌握多个属性的主键约束、外键约束、CHECK约束的定义格式。
2.掌握约束的命名方式。
(4)检查表是否创建成功。
2.插入数据
将如下表格中的数据分别插入到数据库相应的表中:
表4.学生基本信息表
学号
姓名
性别
年龄
所在系
班级
总学分
20100001
李勇
男
20
CS
1001
0
20100002
刘晨
女
19
CS
1001
0
20100021
王敏
女
18
MA
1002
0
20100031
张立
男
19
IS
1003
0
20100003
刘洋
女
1001
0
20100010
赵斌
男
19
IS
1005
0
20100022
张明明
男
19
CS
1002
0
表5.课程信息表
课程号
课程名
先修课程号
学分
1
数据库系统原理
5
4
2
高等数学
2
3
管理信息系统
1
4
4
操作系统原理
6
3
5
数据结构
7
4
6
数据处理
2
7
C语言
4
表6.学生选课信息表
学号
课程号
成绩
20100001
1
92
20100001
2
85
20100001
3
88
20100002
1
90
20100002
2
80
20100003
1
200100010
3
(1)插入学生信息到Student表
INSERTINTOStudentVALUES('20100001','李勇','男',20,'CS','1001',0)
INSERTINTOStudentVALUES('20100002','刘晨','女',19,'CS','1001',0)
INSERTINTOStudentVALUES('20100021','王敏','女',18,'MA','1002',0)
INSERTINTOStudentVALUES('20100031','张立','男',19,'IS','1003',0)
INSERTINTOStudentVALUES('20100003','刘洋','女','1001',0)
INSERTINTOStudentVALUES('20100010','赵斌','男',19,'IS','1005',0)
INSERTINTOStudentVALUES('20100022','张明明','男',19,'CS','1002',0
请写出插入其余行的插入语句,并插入数据。
(2)插入到课程信息到Course表
INSERTINTOCourse(Cno,Cname,Cpno,Ccredit)VALUES('1','数据库系统原理','5',4)INSERTINTOCourse(Cno,Cname,Cpno,Ccredit)VALUES('2','高等数学',null,2)
INSERTINTOCourse(Cno,Cname,Cpno,Ccredit)VALUES('3','管理信息系统','1',4)
INSERTINTOCourse(Cno,Cname,Cpno,Ccredit)VALUES('4','操作系统原理','6',3)
INSERTINTOCourse(Cno,Cname,Cpno,Ccredit)VALUES('5','数据结构','7',4)
INSERTINTOCourse(Cno,Cname,Cpno,Ccredit)VALUES('6','数据处理',NULL,2)
INSERTINTOCourse(Cno,Cname,Cpno,Ccredit)VALUES('7','C语言',NULL,4)
请写出插入其余行的插入语句,并插入数据。
(3)插入到SC表
INSERTINTOSCVALUES('20100001','1',92)INSERTINTOSCVALUES('20100001','2',85)
INSERTINTOSCVALUES('20100001','3',88)
INSERTINTOSCVALUES('20100002','1',90)
INSERTINTOSCVALUES('20100002','2',80)
INSERTINTOSCVALUES('20100003','1',NULL)
INSERTINTOSCVALUES('20100010','3',NULL)
(4)检查插入到表中的数据
3.修改约束
对数据库中已经存在的表,可对其增加约束或修改已存在的约束:
(1)添加约束
ALTERTABLECourseADDUNIQUE(Cname)
ALTERTABLECourseADDFOREIGNKEY(Cpno)REFERENCESCourse(Cno)
(1)掌握如何添加约束
(2)掌握如何声明唯一约束
(2)修改约束
ALTERTABLESCDROPCONSTRAINTSC_CHECK
ALTERTABLESCADDCONSTRAINTSC_CHECKCHECK(Grade>=0ANDGrade<=100)
(1)掌握如何修改约束
(2)理解命名约束的优点
二、检查完整性约束
通过修改数据库中的数据检查完整性约束条件的作用。
1.检查主键约束
(1)执行下面的语句修改Student表,观察语句能否正确运行,解释为什么?
INSERTINTOStudentVALUES('20100101','李斌','男',20,'CS','1001',0)
INSERTINTOStudentVALUES('20100001','李斌','男',20,'CS','1001',0)
UPDATEStudentSETSno='20100021'WHERESname='张立'
(2)执行下面的语句修改SC表,观察语句能否正确运行,解释为什么?
INSERTINTOSCVALUES('20100001','1',78)
INSERTINTOSCVALUES('20100001',null,78)
2.检查唯一约
执行下面的语句修改Course表,观察语句能否正确运行,解释为什么?
INSERTINTOCourseVALUES('8','JAVA',7,3)INSERTINTOCourseVALUES('9','数据结',7,3)
3.检查默认值、允许空值列
运行如下的语句:
INSERTINTOStudent(Sno,Sname,Ssex,Sclass)VALUES('20100102','张盛','男','1008')
观察插入数据行的数值
SELECT*FROMStudentWHereSno='20100102'
4.检查非空约束
下面的语句包含空值,检查运行结果,解释为什么?
INSERTINTOStudent(Sno,Sname,Ssex,Sclass)VALUES('20100103','张盛','男',NULL)INSERTINTOStudent(Sno,Sname,Ssex)VALUES('20100104','张盛','男')
5.检查CHECK约束
执行下面的语句,解释其运行结果。
INSERTINTOSCVALUES('20100001','4',95)
INSERTINTOSCVALUES('20100001','4',102)
INSERTINTOStudent(Sno,Sname,Ssex,Sclass)VALUES('20100103','张盛','男','1008')INSERTINTOStudent(Sno,Sname,Ssex,Sclass)VALUES('20100104','张盛','','1008')
6.检查外键约束
(1)执行下面的语句检查外键约束的作用
INSERTINTOSCVALUES('20100301','1',95)
INSERTINTOSCVALUES('20100001','10',95)
UPDATESCSETCno='10'WhereCno='1'
UPDATECourseSETCno='10'WhereCno='3'
(2)执行下面的语句检查对被引用表的约束
DELETEStudentWHERESno='20100021'
DELETEStudentWHERESno='20100001'
UPDATECourseSETCno='10'WHERECname='数据库系统原理'
三、触发器的定义及使用
1.定义触发器
(1)定义一个触发器,实现有关学分的完整性约束:
当向SC表插入一行选课记录时,自动将该课程的学分累加到该学生的总学分中。
CREATETRIGGERtr_INSERTONSCFORINSERT
AS
--声明变量
DECLARE@snochar(8)DECLARE@criditintDECLARE@cnochar(4)--提取插入的数据
SELECT@sno=Sno,@cno=CnoFROMinserted--提取学生的总学分
SELECT@cridit=Ccredit
FROMSCjoinCourseON(SC.Cno=Course.Cno)WHERESC.Cno=@cno
--更新总学分
UPDATEStudentSETStotal=Stotal+@criditWHERESno=@sno
GO
(2)定义一个触发器,实现对SC表的操作登记:
当用户向SC表插入或修改时,记录该操作到数据库中。
z创建日志登记表:
CREATETABLELOG_TABLE
(
usernamechar(10),--操作人员
datedatetime,--修改时间
Snochar(8),--学生学号
Cnochar(4)--课程号
)
创建日志登记触发器:
CREATETRIGGERtr_UPDATEONSCFORINSERT,UPDATE
AS
DECLARE@snochar(8)DECLARE@cnochar(4)DECLARE@newsmallint
SELECT@sno=Sno,@cno=CnoFROMinserted
INSERTINTOLOG_TABLEVALUES(CURRENT_USER,getdate(),@Sno,@Cno);
GO
(3)执行插入操作,触发触发器:
INSERTINTOSCVALUES('20100001','6',95)
(4)验证触发器是否触发
select*fromstudent
select*fromLOG_TABLE
3
五、讨论、心得(可选)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)