东北大学数据库实验报告Word文档格式.docx
- 文档编号:22635365
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:48
- 大小:4.12MB
东北大学数据库实验报告Word文档格式.docx
《东北大学数据库实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《东北大学数据库实验报告Word文档格式.docx(48页珍藏版)》请在冰豆网上搜索。
先行课号
2.在数据库中定义这些关系模式,并向基本表中插入如下数据:
CREATEtableStudents
(Snochar(10)primarykey,
Snamechar(20),
Sageint,
sdeptchar(20))
createtableCourses
(Cnochar(4),
Cnamechar(40),
Ccreditint,
Ctimeint,
Cpnochar(4),
primarykey(cno),
Foreignkey(Cpno)referencesCourses(Cno))
createtableSC
(Snochar(10),
Cnochar(4),
Gradeint,
primarykey(Sno,Cno),
foreignkey(Sno)referencesStudents(Sno),
foreignkey(Cno)referencesCourses(Cno))
insertintoCoursesvalues('
0001'
'
C语言'
4,60,null)
0002'
C++语言'
0003'
JAVA'
0004'
数据结构'
0005'
高数'
0006'
离散数学'
0007'
计算原理'
4,60,'
)
0008'
算法设计'
0009'
文本'
0010'
信息安全'
3.插入相应的数据,试着插入重复的元组,结果如何?
插入相同数据
不能插入重复数据
4.在已建立的关系模式之上(已插入一些数据)建立主键约束,参照约束和用户定义的约束(要求学生年龄不小于14岁,不大于35岁),如果约束不能建立,请分析原因,修改后建立上述约束。
altertableStudentsaddcheck(Sage>
=14andSage<
=35)
altertableStudentsaddprimarykey(Sno)不能建立
5.如果约束建立后,请试着插入重复元组,结果如何?
试着插入重复元组,无法插入:
实验
(二):
0000'
C1'
C++'
离散'
数据库'
文本智能处理'
0011'
C2'
null'
用SQL完成下列查询
1.求选修了课程的学生的学号,要求:
(1)不使用distinct语句,消除重复元组,写出其SQL语句
SelectSnofromSC
(2)使用distinct语句,消除重复元组,写出其SQL语句
selectdistinctSnofromSC
(3)如果该查询写成:
selectStudents.SnofromStudents,SCwhereStudents.Sno=SC.Sno
请问该查询结果和上面哪个结果是相同的?
和1相同
2.求开设的课程号、课程名、学时和学分,要求对查询结果的列重新命名。
selectCnoMyCno,CnameMyCname,CtimeMyCtime,CCreditMyCredictfromCourses
3.求计算机系和数学系的学生学号、姓名和年龄。
selectSno,Sname,SagefromStudentswhereSdept='
计算机'
orSdept='
数学'
4.求不是数学系、计算机系的学生的情况,要求select后写*代替列出所有的列名。
select*fromStudentswhereStudents.Sdept!
='
andStudents.Sdept!
5.求全体学生的信息,要求按年龄升序排列。
select*fromStudentsorderbySageasc
6.求计算机系年龄在18~20岁之间的学生姓名和年龄
selectSname,SagefromStudentswhereSage>
=18andSage<
=20andSdept='
7.求姓名是以老开头的计算机系学生。
select*fromStudentswhereSnamelike'
老%'
andSdept='
8.求选修了C1课程的学生的学号、姓名、成绩。
selectStudents.Sno,Students.Sname,SC.GradefromStudents,SC,CourseswhereSC.Sno=Students.SnoandSC.Cno=Courses.CnoandCourses.Cname='
9.求学号为95开头的学生的学号和所选修的课程的学分。
selectStudents.Sno,Courses.Cname,Courses.CCreditfromStudents,SC,CourseswhereStudents.Snolike'
95%'
andStudents.Sno=SC.SnoandSC.Cno=Courses.Cno
10.求选修C1课程且成绩为80分以上的学生的学号、姓名和成绩。
selectStudents.Sno,Students.Sname,SC.GradefromStudents,SC,CourseswhereStudents.Sno=SC.SnoandSC.Cno=Courses.CnoandCourses.Cname='
andSC.Grade>
80
11.求计算机系每个学生的姓名,选修的课程名和成绩。
selectStudents.Sname,Courses.Cname,SC.GradefromStudents,SC,CourseswhereStudents.Sdept='
12.求每个学生的学号及平均成绩。
selectSno,AVG(Grade)AvgGradefromSCgroupbySno
13.求男学生每一年龄组中超过1人的年龄组及人数。
selectSage,Count(Sno)countSnofromStudentsgroupbySagehavingCount(Sno)>
1
14.求每一门课程的间接先行课号。
selectC1.Cno,C2.CpnofromCoursesC1,CoursesC2whereC1.Cpno=C2.Cno
15.求选修了全部课程的学生的学号。
selectSnofromStudentswherenotexists(select*fromCourseswherenotexists(select*fromSCwhereSno=Students.SnoandCno=Courses.Cno));
实验(三):
数据库的安全性和完整性
了解和使用安全子系统;
进行完整性定义和检查。
一熟练掌握SQL(续)
1.修改表Students,在其中加入一个字段性别sexchar
(1)
altertableStudentsaddsexchar
(1);
2.创建索引:
在Students表的Sno上创建唯一聚簇索引,在SC表的(Sno,Cno)上创建唯一索引.查询Students表的内容,记录的顺序有变化吗?
查询SC表的内容,记录的顺序有变化吗?
CreateuniqueclusteredindexStudent_snoonStudents(Sno);
CreateuniqueindexSno_cnoonSC(Sno,Cno);
Students表的内容,记录的顺序有变化
SC表的内容,记录的顺序没有变化
3.创建视图
▪创建计算机系学生视图CS_Students,其中包括学号、年龄和性别。
带withcheckopition子句
不带withcheckopition子句
时各插入一计算机系学生记录,通过视图查询插入的记录,结果如何?
通过表Students查询插入的记录,查看所在系字段上的值?
createviewCS_students1asselectSno,Sage,sexfromStudentswhereSdept='
CS'
withcheckoption
INSERTINTOCS_students1
VALUES('
20133333'
19,'
m'
);
createviewCS_students2asselectSno,Sage,sexfromStudentswhereSdept='
INSERTINTOCS_students2
▪创建一视图,表示学生的平均成绩,其中包括Sno,avgGrade。
通过该视图插入一学生姓名和平均成绩,结果如何?
通过该视图查找平均成绩在90分以上的学生的学号和平均成绩,结果又如何?
createviewStuavggrade(sno,avggrade)
asselectSno,avg(Grade)fromSCgroupbySC.sno
InsertintoStuavggrade
selectsno,avggrade
fromStuavggrade
whereavggrade>
=90
二了解和使用安全子系统
1、将sqlserver的一合法帐户(user60)加入到你的数据库当中来,并给其授权,
SP_grantdbaccess'
user63'
;
使之:
具有创建表的权限
grantCreatetabletouser63;
具有对Students表查询的权限
grantselectonStudentstouser63;
具有对Studetns表的年龄字段修改的权限
grantupdate(Sage)onStudentstouser63;
2、用user60/user60进入系统,完成权限验证:
在Students表上,实现select*fromStudents
在course表上,实现select*fromcourse
updateStudetnssetSage=Sage+1
updateStudentssetSdept=’CS’
3、你是数据库的dbo,你来查看dept表,结果如何?
使用setuser命令使自己成为user60后,查看dept表,结果如何?
三完整性定义和检查
1、创建表Studetns,要求学生的年龄在16和25岁之间,并且所在系的缺省取值为‘CS’
CREATETABLEStudents
(SnoCHAR(9)notnull,
SnameCHAR(20),
Sdeptchar(20)default'
Sageintcheck(Sage>
=16andSage<
=25),
Ssexchar
(2)
在Studetns表上插入一学生记录(‘9921’,‘cccc’,’MA’,23,’f’)
insertintoStudents(Sno,Sname,Sdept,Sage,Ssex)
values('
9921'
cccc'
MA'
23,'
f'
在Studetns表上插入一学生记录(‘9922’,‘ddd’,’MA’,27,’m’)
9922'
ddd'
27,'
在Studetns表上插入一学生记录(‘9923’,‘eeeee’,21,’m’)
insertintoStudents(Sno,Sname,Sage,Ssex)
9923'
eeeee'
21,'
在Studetns表上插入一学生记录(‘9922’,‘ddd’,’MA’,23,’m’)
2、创建表course,要求课号作为主键
createtablecourse
(cnochar(10)primarykey,
ctimechar(10),
cnamechar(20),
cscorechar(10)
在course表上插入一课程记录(’c9’,40,’cname1’,1)
insertintocourse(cno,ctime,cname,cscore)
c9'
40,'
cname1'
1);
在course表上插入一课程记录(’c9’,40,’cname2’,1)
cname2'
在course表上插入一课程记录(null,25,’canme3’,2)
values(null,25,'
cname3'
2);
3、修改表Studetns,指定学号为主键,然后
ALTERTABLEStudentsADDCONSTRAINTpk_SnoPRIMARYKEY(Sno)
插入一记录(’9908’,’shang’,’CI’,20)
insertintoStudents(Sno,Sname,Sdept,Sage)
9908'
shang'
CI'
20);
插入一记录(’’,’liang’,’CS’,18)
'
liang'
18);
插入一记录(’’,’an’,’CS’,19)
an'
19);
4、创建sc表,要求表sc中的学号参照表Studetns中的学号,sc中的课号参照course中的课号。
参照约束创建完成后,向这三个表插入数据。
(Snochar(9),
Cnochar(10),
foreignkey(Cno)referencescourse(cno)
先在sc表插入一个选课记录,看看有什么情况发生?
insertintoSC(Sno,Cno,Grade)
85);
先删除sc中的某个记录,看看有什么情况发生?
deletefromSCwhereSno='
将Studetns表中的学号9906改为9907,看看有什么情况发生?
updateStudentssetSno='
9907'
whereSno='
9906'
实验(四):
事务的并发控制
通过实验了解实际系统中,三级封锁协议的实现方法和使用方法,体会加锁操作、死锁检测与解除。
具体分如下五部分。
说明:
(1)Settransactionisolationlevelreaduncommitted
readcommitted
repeatableread
serializable
分别对应隔离级0,1,2,3。
(2)要求两人一组。
1、隔离级1(缺省)方式下体会两事务的并发执行结果。
具体步骤如下(以user1和user2为例):
●user1首先将user2接纳为自己数据库的用户,并授权user2可以查询学生表students
●user1输入并执行下列语句
begintransaction
updatetablestudentssetage=20+1wheresno=’95001’
●user2输入并执行下列语句
begintransaction
select*fromstudentswheresno=’95001’
1)观察发生的现象,user2的语句可以执行吗(是否可以读到别人没有提交的数据)?
不可以
2)user1输入并执行下列语句
commit
观察发生的现象,user2的语句执行了吗?
可以
3)加锁和解锁操作的完成者是数据库用户吗?
不是,是数据库系统
2、隔离级1(缺省)方式下体会两事务的并发执行结果。
selectagefromstudentswheresno=’95001’
1)观察发生的现象,user1的语句可以执行吗(是否可以修改别人正在读的数据)?
2)观察发生的现象,user2的语句执行了吗?
结果如何(是否可重复读)?
user2输入并执行下列语句
commit
不执行
3、在隔离级0方式下体会两事务的并发执行结果。
updatetablestudentssetage=20+1wheres
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 东北大学 数据库 实验 报告