数据库实验指导材料.docx
- 文档编号:17712980
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:49
- 大小:1.81MB
数据库实验指导材料.docx
《数据库实验指导材料.docx》由会员分享,可在线阅读,更多相关《数据库实验指导材料.docx(49页珍藏版)》请在冰点文库上搜索。
数据库实验指导材料
一、实验教材、参考资料
1.《SQLServer学习与上机实验指导》李春葆等清华大学出版社
2.《SQLSERVER数据库设计与应用案例训练教程》魏茂林等电子工业出版社
3.《SQLServer数据库应用系统开发技术实验指导及习题解答》朱如龙等编著机械工业出版社
4.
二、实验项目汇总表
序号
内容
实验一
SQLserver2000的安装及SQLserver2000常用工具的使用
实验二
数据库及表的创建和管理
实验三
约束的创建及使用
实验四
表中数据的查询及维护
实验五
Transact—SQL程序设计
实验六
SQLServer视图及索引的创建及使用
实验七
SQLServer的存储过程
实验八
SQLServer的触发器
实验九
SQLServer的安全性管理及代理服务
实验十
数据库的备份及恢复
实验十一
SQLServer数据转换
实验附录:
上机实验一
1.练习安装SQLSERVER2000及卸载SQLSERVER2000。
2.管理器创建一个新的SQLServer服务器组,作为MicrosoftSQLServers的子对象,名称为“NewGroup”
3.在计算机上再安装一个SQLServer命名实例,实例名为“people”。
使用企业管理器在NewGroup服务器组下创建一个新的SQLServer注册,使她连接people实例。
上机实验二
1.使用企业管理器创建名为student的数据库,并设置数据库主文件名为syudent_data,大小为10MB;日志文件为student_log,大小为2MB.其他参数取默认值。
步骤:
a.
b.
c.
d.
2.使用Transact—SQL语言创建一个student1数据库,主文件逻辑名为student1_data,物理文件名为student1.mdf,为10MB,增长速度为10%;数据库的日志文件逻辑名为syudent1_log,物理文件名为student1.ldf,初始化大小为1MB,最大尺寸为5MB,增长速度为1MB;文件存放路径为c:
\data文件夹下。
Createdatabasestudent1
Onprimry
(name=student1_data,
filename=c:
\data\student1.mdf,
size=10,
maxsize=unlimited,
filegrowth=10%)
logon
(name=student1_log,
filename=c:
\data\student1.ldf,
size=1,
maxsize=5,
filegrowth=1)
3.在student数据库中创建一个名为pupil的表,要求:
(snochar(6)notnull,snamechar(10)notnull,ssexchar
(2)notnull,birthdaydatetimenotnull,politychar(20))
步骤:
a.
b.
c.
保存并命名为pupil即可。
上机实验三
1.将pupil表的sno设置为主键。
2.为sname字段设置惟一性约束。
步骤:
3.为ssex和birthday设置检查性约束,要求ssex只能为‘男’或‘女’,birthday应该大于‘1987-1-1’。
步骤:
4.
为polity字段设置默认约束,值为‘群众’。
5.再创建一个学生选课表sc(snochar(6)notnull,cnochar(10)notnull,gradereal).
为sc表创建外键约束,把sc表的sno和pupil表的sno关联起来,在这两个表之间创建一种制约关系。
步骤:
最后保存该关系图即可。
上机实验四
1.已知一个名为pupil的表:
(snochar(6)notnull,snamechar(10)notnull,ssexchar
(2)notnull,birthdaydatetimenotnull,politychar(20),sdeptchar(20)notnull)
a.利用insert语句向其中插入一条新的记录:
(‘0007’,‘张三’,‘男’,‘1982-3-21’,‘团员’,’计算机系’)
insertintopupil
values(‘0007’,‘张三’,‘男’,‘1982-3-21’,‘团员’,‘计算机系’)
b.利用update语句将编号为‘0004’的学生polity改为‘党员’:
updatepupil
setpolity=’党员’
wheresno=’0004’
a.利用delete语句将‘186-1-1’以后出生的女同学记录删除。
Deletefrompupil
Wherepolity>1986-1-1andssex=’女’
2.针对pupil、sc、course三张表完成以下查询:
a.查询所有学生的基本信息,并按出生日期升序排列
select*frompupilorderbypolity
b.查询女同学的信息和女同学的人数
select*frompupilwheressex=’女’
computecount(sno)
c.查询所有男同学的年龄
selectyear(getdate())-year(birthday)as年龄frompupil
d.所有选课学生的姓名、选修课程名及成绩
selectsname,cname,grade
frompupil,sc,course
wherepupil.sno=sc.snoando=o
e.不及格学生的姓名
selectdistinctsname
frompupil,sc,course
wherepupil.sno=sc.snoando=oandgrade<60
f.查询‘刘’姓学生的信息
select*frompupilwheresnamelike‘刘%’
g.查询polity为’团员’或’党员’的学生信息
select*frompupilwherepolityin(‘团员’,’党员’)
h.查询各门课程的选课人数
selectcno,count(sno)fromscgroupbycno
i.查询缺少成绩的学生的学号及课程号
selectsno,cnofromscwheregradeisnull
j.查询与‘刘成’同一个系的学生情况
select*frompupilwheresdeptin(selectsdeptfrompupilwheresname=’刘成’))
k.查询选修了课程名为‘MIS’的学生的学号和姓名
selectsno,snamefrompupilwheresnoin(selectsnofromscwherecnoin(selectcnofromcoursewherecname=’MIS’))
上机实验五
1.编写一个用户自定义函数fun_avggrade,要求根据输入的班级号和课程号,求此班级此课程的平均分。
Createfunctionfun_avggrade
(@classnumberaschar(10),@coursenumberaschar(10))
returnsreal
begin
declare@avgresult
select@avgresult=avg(grade)
fromsc
wheresubstring(sno,1,len(sno)-2)=@classnumberandcno=@coursenumber
return@avgresult
end
2.编写一个用户自定义函数,完成以下功能:
根据两个
输入参数(成绩上限和成绩下限),求sc数据表中满足输
入条件的学生人数。
Createfunctionfun_sumren
(@maxlinereal,@minlinereal)
returnsint
begin
declare@personcountasint
select@personcount=(selectcount(distinctsno)fromsc)
fromsc
wheregrade<=@maxlinerealandgrade>=@minline
return@personcount
end
上机实验六
1.如何通过企业管理器和Transact_SQL语句对视图进行创建、修改和删除?
通过企业管理器:
创建步骤:
最后保存该视图即可。
修改步骤:
进入该界面重新修改该视图即可。
删除步骤:
通过Transact_SQL语句:
创建:
createview视图名
[withencryption]
asselect_statement
[withcheckoption]
修改:
利用alterview视图名
删除:
利用dropview视图名
2.
通过Transact_SQL语句创建一个视图,计算各个班级的各门课程的平均分。
Createviewv_avggrade
As
Selectsubstring(pupil.sno,1,len(pupil.sno)-2)as班级,
Cnameas课程名称,
Avg(grade)as平均分
Frompupil,sc,grade
Wherepupil.sno=sc.snoando=o
Groupbysubstring(pupil.sno,1,len(pupil.sno)-2),Cname
3.通过Transact_SQL语句创建一个视图,显示‘高等数学’未过的学生的信息。
Createviewv_gradenotpass
As
Selectpupil.sno,sname,cname,grade
Frompupil,sc,course
Wherepupil.sno=sc.snoando=oandgrade<60
Andcname=’高等数学’
4.
通过Transact_SQL语句创建一个视图,查询的数据为99521班学生的考试成绩。
Createviewv_grade99521
As
Selectpupil.sno,sname,cname,grade
Frompupil,sc,course
Wherepupil.sno=sc.snoando=oand
left(pupil.sno,5)=’99521’
5.如何通过企业管理器创建索引?
步骤:
点击‘新建’按钮
点击‘确定’
点击‘关闭’
6.
如何删除索引?
选中该索引点击‘删除’即可
或
利用dropindex表名.索引名完成删除
上机实验七
1.创建一个存储过程stugradeinfo,查询班级、学号、姓名、性别、课程名称、分数
createprocedurestugradeinfo
as
select班级=substring(pupil.sno,1,len(pupil.sno)-2),
pupil.snoas学号,
snameas姓名,
ssexas性别,
cnameas课程名称,
gradeas分数
frompupil,sc,course
wherepupil.sno=sc.snoando=o
2.利用企业管理器创建一个存储过程stu_info,根据传入的编号,查询某学生的基本信息。
代码如下:
createprocedurestu_info
@stunumchar(10)
as
ifnotexists(select*frompupilwheresno=@stunum)
print‘查无此人!
!
!
!
!
’
else
begin
selectsnoas编号,
snameas姓名,
ssexas性别,
birthdayas出生日期,
polityas政治面貌
frompupil
wheresno=@stunum
end
3.创建一个存储过程stu_age,根据输入的学生姓名,计算该学生的年龄。
Createprocedurestu_age
@stunamechar(10)
as
ifnotexists(select*frompupilwheresname=@stuname)
print‘查无此人!
!
!
!
!
’
else
begin
declare@ageint
select@age=floor(datediff(day,birthday,getdate())/365)
frompupil
wheresname=@stuname
end
4.
创建一个存储过程stu_grade,根据输入的学生编号,返回其选课及其成绩。
Createprocedurestu_grade
@stunumchar(10)
ifnotexists(select*frompupilwheresname=@stuname)
print‘查无此人!
!
!
!
!
’
else
begin
ifnotexists(select*frompupil,scwherepupil.sno=sc.sno)
print‘无此学生的选课信息!
!
!
!
’
else
selectsname,cname,grade
frompupil,course,sc
wherepupil.sno=sc.snoandcourse=cno=o
end
上机实验八
1.创建一个insert触发器,当在pupil表中插入一条新记录时,给出‘你已经插入了一条新记录!
!
!
’的提示信息。
步骤:
程序代码如下:
createtriggerstuinsertonpupil
forinsert
as
declare@msgchar(50)
set@msg=’你已经插入了一条新记录!
!
!
’
print@msg
2.创建一个insert触发器,当在pupil表中插入一条新记录时,不允许在学号中出现重复的编号或出现空值。
程序代码如下:
createtriggerstuinsert1onpupil
forinsert
as
declare@stunumchar(10)
set@stunum=(selectsnofrominserted)
if@stunumisnull
begin
print‘学号不能为空!
!
!
!
’
rollbacktransaction
end
else
begin
declare@numint
set@num=(selectcount(*)frompupilwheresnoin(selectsnofrominserted))
if@num>1
begin
print‘已经有相同的学号,请重新确认!
!
!
!
’
rollbacktransaction
end
else
print‘数据录入成功!
!
!
!
’
end
3.创建一个insert触发器,当在sc表中插入一条新记录时,sno和cno必须是已经存在的学号和课程号,且grade应该在0----100之间。
程序代码如下:
createtriggerscinsertonsc
forinsert
as
declare@gradevaluereal
set@gradevalue=(selectgradefrominserted)
print‘触发器开始工作………………’
ifnotexists(selectsnofrominserted
wheresnoin(selectsnofrompupil))
begin
print‘无此学生的编号,请重新确认!
!
!
’
rollbacktransaction
end
else
begin
ifnotexists(selectcnofrominsertedwherecnoin(selectcnofromcourse))
begin
print‘无此课程的编号,请重新确认!
!
!
’
rollbacktransaction
end
else
begin
if@gradevalue<0or@gradevalue>100
begin
print‘分数有误,请重新确认!
!
!
!
’
rollbacktransaction
end
else
print‘数据插入成功!
!
!
!
’
end
end
4.创建一个after触发器,在pupil表中删除某学生的记录时,删除其相应的选课记录。
程序代码如下:
createtriggerstudeleteonpupil
fordelete
as
declare@stunumchar(10)
select@stunum=snofromdeleted
ifnotexists(select*frompupil,sc
wherepupil.sno=sc.snoandpupil.sno=@stunum)
print‘无此学生的选课记录!
!
!
!
’
else
begin
print‘开始查找并删除该学生相映的选课记录……..‘
deletefromscwheresno=@stunum
print‘该学生的选课记录已经删除!
!
!
!
!
’
end
5.创建一个insteadof触发器,当在course表中上出记录时,不允许删除course表中的数据。
程序代码如下:
createtriggernotallowdelete
oncourse
insteadofdelete
as
print‘insteadof触发器开始工作……………’
print‘course表中的数据不允许删除!
!
!
不能执行删除操作!
!
’
上机实验九
1.使用企业管理器和Transact_SQL语句管理登录帐户
2.使用企业管理器和Transact_SQL语句管理数据库用户
3.使用企业管理器和Transact_SQL语句管理服务器角色和数据库角色
4.使用企业管理器和Transact_SQL语句管理语句权限和对象权限
5.练习创建一个作业。
6.练习创建一个警报。
上机实验十
1.创建一个备份设备。
2.
使用企业管理器对一数据库做一次完全数据备份。
3.
使用企业管理器恢复某一数据库的完全数据备份
上机实验十一
1.导入一个文本文件到SQLServer数据库当中。
2.将SQLServer数据库当中的表导出到access数据库当中。
3.
利用DTS设计器将表从一个数据库复制到另一个数据库当中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实验 指导 材料