太原理工大学数据库实验报告.docx
《太原理工大学数据库实验报告.docx》由会员分享,可在线阅读,更多相关《太原理工大学数据库实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
太原理工大学数据库实验报告
太原理工大学学生实验报告
学院名称
专业班级
课程名称
学号
学生姓名
实验日期
实验成绩
实验题目
交互式SQL
实验一认识DBMS
一、实验目的
1.通过对某个商用数据库管理系统的安装使用,初步了解DBMS的
工作环境和系统构架。
在此推荐SQLSERVER2005。
2.熟悉DBMS的安装、配置及使用。
3.搭建今后实验的平台。
二、实验平台
操作系统:
WindowsXP。
数据库管理系统:
SQLSERVER2005。
选择安装各个数据库管理系统
之前,请仔细看清硬件的配置要求。
三、实验内容和要求
1.根据安装文件的说明安装数据库管理系统。
在安装过程中记录安
装的选择,并且对所作的选择进行思考,为何要进行这样的配置,对今
后运行数据库管理系统会有什么影响。
2.学会启动和停止数据库服务。
在正确安装SQLSERVER2005后,SQLSERVER数据库引擎服务会在
系统启动时自动启动。
如果要手动地启动和停止数据库引擎服务,可以
通过SQLSERVER配置管理器(SQLSERVERCONFIGURATIONMANAGER)来
进行管理。
SQLSERVER配置管理器综合了SQLSERVER2000中的服务管
理器、服务器网络适用工具和客户端网络实用工具的功能。
打开SQLSERVER配置管理器工具,单击“SQLSERVER2005服务”
节点,其中的“SQLSERVER”服务就是我们所说的数据库引擎。
与SQL
SERVER2000一样,可以通过这个配置管理器来启动、停止所安装的服
务,如“SQLSERVER(MSSQLSERVER)”。
3.了解RDBMS系统的体系结构。
实验二交互式SQL
一.数据定义
(一)基本表的操作
1.建立基本表
例如,建立一个学生表:
createtableStudent
(Snochar(9)primarykey,
Snamechar(20)unique,
Ssexchar
(2),
Sagesmallint,
Sdeptchar(20))
建立一个课程表:
createtableCourse
(Cnochar(4)primarykey,
Cnamechar(40),
Cpnochar(4),
Ccreditsmallint,
foreignkey(Cpno)referencesCourse(Cno))
createtablesc
(Snochar(9),
Cnochar(4),
Gradesmallint,
primarykey(Sno,Cno),
foreignkey(Sno)referencesstudent(Sno),
foreignkey(Cno)referencescourse(Cno));
2.修改基本表
例如,像student表加一个入学时间列:
altertableStudentaddS_entrancedatetime
altertableStudentaltercolumnSageint
altertableCourseaddunique(Cname)
3.删除基本表
例如,删除已经建立的学生表:
droptableStudent
droptableCourse
(二)索引操作
1.建立索引
例如,为学生课程数据库中的student,course,sc三个表建立索引。
其中student表按学号升序建唯一索引,course表按课程号升序建唯一索引,sc表按学生升序和课程号升序建唯一索引:
createuniqueindexStusnoonStudent(Sno);
createuniqueindexCoucnoonCourse(Cno);
createuniqueindexSCnoonSC(SnoASC,CnoDESC)
2.删除索引
例如,删除student表的Stusno索引:
dropindexStusname
(三)数据操作
一.更新操作
1.插入数据
例如,在student表中插入下列数据:
200215125,张立,男,19,IS
代码如下
insertintostudent(Sno,Sname,Ssex,Sage,Sdept)values('200215125','张
立','男',19,'IS')
插入后,结果如下:
在Course表中插入以下数据:
1,数据库,5,4
2,数学,null,2
6,数据处理,null,2
4,操作系统,6,3
7,PASCAL语言,6,4
5,数据结构,7,4
1,数据库,5,4
3,信息系统,1,4
insertintocourse(Cno,Cname,Cpno,Ccredit)values('1','数据库','5',4);
insertintocourse(Cno,Cname,Ccredit)values('2','数学',2);
insertintocourse(Cno,Cname,Ccredit)values('6','数据处理',2);
insertintocourse(Cno,Cname,Cpno,Ccredit)values('4','操作系统','6',3);
insertintocourse(Cno,Cname,Cpno,Ccredit)values('7','PASCAL语言','6',4);
insertintocourse(Cno,Cname,Cpno,Ccredit)values('5','数据结构','7',4);
insertintocourse(Cno,Cname,Cpno,Ccredit)values('1','数据库','5',4);
insertintocourse(Cno,Cname,Cpno,Ccredit)values('3','信息系统','1',4);
2.修改数据
例如,将学生200215121的年龄改为22岁:
updatestudentsetSage=22whereSno='200215121'
修改前:
修改后:
3.删除数据
例如,删除学号为200215128的学生记录:
deletefromstudentwhereSno='200215128'
删除所有学生的选课记录:
deletefromsc
删除计算机科学系所有学生的选课记录:
deletefromscwhere'CS'=(selectSdeptfromstudentwherestudent.Sno=SC.Sno)
二.查询操作
1.单表查询
例如,查询全体学生的学号与姓名:
selectSno,Snamefromstudent
再例如,查询全体学生的详细记录
select*fromstudent;
查询所有年龄在20岁以下的学生姓名及其年龄。
selectSname,SagefromstudentwhereSage<20;
查询所有姓刘的学生的姓名、学号和性别。
selectSname,Sno,SsexfromstudentwhereSnamelike'刘%';
2.连接查询
例如,查询每个学生及其选修课程的情况:
selectstudent.*,sc.*
fromstudent,sc
wherestudent.Sno=sc.Sno
查询每一门课的间接先修课:
selectfirst.Cno,second.Cpno
fromcoursefirst,coursesecond
wherefirst.Cpno=second.Cno
查询每个学生及其选修课程的情况,用外连接来完成。
selectstudent.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
fromstudentleftouterjoinscon
(student.Sno=sc.Sno);
3.嵌套查询
例如,查询与“刘晨”在同一个系学习的学生。
selectSno,Sname,Sdept
fromstudentwhere
Sdeptin
(selectSdeptfromstudent
where
Sname='刘晨');
查询选修了课程名为“信息系统”的学生学号和姓名.
selectSno,Sname
fromstudentwhere
Snoin
(selectSnofromsc
Where
Cnoin
(select
Cnofromcourse
where
Cname='信息系统'));
4.集合查询
例如,查询计算机科学系的学生以及年龄不及十九岁的学生:
Select*
Formstudent
Wheresdept=‘cs’
Union
Select*
Fromstudent
Wheresage<19
三.视图操作
1.建立视图
例如,建立信息系学生的视图:
Createview
IS_student
As
Selectsno.sname,sage
Formstudent
Wheresdept=‘IS’
将学生的学号和他的成绩定义为一个视图
2.删除视图
例如,删除视图BT_S
DropviewBT_S
3.查询视图
在信息系学生中找出年龄小于20岁的学生
Select*
FormIS_Student
Wheresage<20
4.更新视图
将信息系统学生IS_student中学号为200215122的学生姓名改为“刘辰”
UpdateIS_student
Setsname=‘l刘辰’
Wheresno=‘200215122’
删除信息系学生视图IS_studnet中学号为200215129的记录
Delete
FromIS_student
Wheresno=‘200215129’
实验三数据库完整性
一、实验目的
(1)了解SQLSerer数据库系统中数据完整性控制的基本方法
(2)了解使用SSMS设置约束
(3)熟练掌握常用CREATE或ALTER在创建或修改表时设置约束
(4)了解触发器的机制和使用
(5)验证数据库系统数据完整性控制
二、实验平台
使用SQLServer数据库管理系统提供的SSMS。
三、实验内容及要求
结合图1—ST数据库中的各个表,设置相关的约束,并设置一个触发器,实现学生选课总学分的完整性控制,并验证完整性检查机制。
要求包括如下方面的内容:
1.使用SSMS的图形界面设置约束
使用SSMS的图形界面设置各种约束,按如下图示进入表设计窗口:
在表设计窗口中,鼠标右击,选择设置约束(按如下图示)
2.使用SQL语句设置约束
使用CREATE或ALTER语句完成如下的操作,包括:
1)设置各表的主键约束
2)设置相关表的外键
3)设置相关属性的非空约束、默认值约束、唯一约束
4)设置相关属性的CHECK约束
Createtablestudent
(snochar(6)primarykey,--主键约束
Snamechar(10)unique,--唯一约束
Sumcintcheck(sumc=0),--用户自定义约束,初值为0
Sdeptchar
(2)notnull)--非空约束
Createtablesc
(snochar(6),
Cnochar(3)notnull,--非空约束
Gradeint,
Creditint,
Primarykey(sno,cno),--主键约束
Foreignkey(sno)referencesstudent(sno))--外键约束
3.使用触发器
创建一个触发器,实现如下的完整性约束:
1)当向SC表中插入一行数据时,自动将学分累加到总学分中。
●定义触发器
createtriggerstu_insert
onscafterinsert
as
begin
declare@snochar(8),@xfint
ifexists(select*frominsertedwheregrade>60)then
begin
select@sno=sno,@xf=creditfrominserted
updatestudentsetsumc=sumc+@xfwheresno=@sno
print'success'
end
else
print'fail'
end
2)在表student中建立删除触发器,实现表student和表sc的级联删除
Createtriggersdelete
Onstudentinsteadofdelete
As
Deletefromsc
Wheresnoin(selectsnofromdeleted)
Deletefromstudent
Wheresnoin(selectsnofromdeleted)
4.检查约束和触发器
分别向相关表插入若干条记录,检查你设置的完整性约束是否有效:
1)插入若干条包含正确数据的记录,检查插入情况
2)分别针对设置的各个约束,插入违反约束的数据,检查操作能否进行
3)向SC表插入若干行数据,检查触发器能否实现其数据一致性功能。
●激活触发器
insertintostudent(sno,sname,sdept)values('010001','王林','01')
insertintostudent(sno,sname,sdept)values('010002','程明','01')
insertintoscvalues('010001','101',80,4)
insertintoscvalues('010001','102',87,3)
insertintoscvalues('010002','101',85,4)
实验四数据库安全性
一、实验目的
(1)了解SQLSerer数据库系统中数据访问控制的基本方法
(2)了解使用SSMS如何给用户授权
(3)熟练掌握常用GRANT和REVOKE进行权限控制
(4)验证数据库系统的访问控制
二、实验平台
使用SQLServer数据库管理系统提供的SSMS和查询编辑器。
三、实验内容及要求
对上以一实验建立的表进行权限设置,并检查权限控制。
要求包括如下方面的内容:
(一)使用SSMS的图形界面授权
1. 使用SSMS的图形界面创建登录名(按如下图示)
2.使用ssms图形界面创建数据库用户(按下图所示)
3.使用SSMS的图形界面进行授权,分别设置用户对象的访问权限:
(1)打开属性窗口
(2)在属性窗口的“安全对象”中进行设置
(二)使用SQL语句设置权限
1.创建登录名。
创建SQLserver登录名hawk,其密码为hawk:
Createloginhawk
Withpassword=‘hawk’
修改登录密码为11:
Alterloginhawk
Withpassword=‘11’
删除帐户hawk:
Droploginhawk
2.创建数据库用户
使用CREATEUSER语句为新创建的登录名创建用户:
Createuserhawk
Forloginhawk
删除用户操作为:
Dropuserhawk
3.授权
按上述方法创建两个用户,并对其中一个授予查询、插入和修改的权限,另一个不授权。
例如:
Grantselectonstudent
Toaa
Grantinsertonstudent
Toaa
下面检查权限控制
分别以两个登录名登录,在查询编辑器中使用SQL语句进行如下操作:
已授权用户登录界面如下,
1)以授权用户执行一个查询表的操作,检查操作能否进行
2)以未授权用户执行一个查询表的操作,检查操作能否进行
3)给未授权用户授权后,执行授权的操作,检查操作能否进行
4)撤销权限后,检查操作能否进行
REVOKESELECTONSCFROMaa
实验心得
这次实验做的时间比较长,尤其是第二个实验,我把所有的操作都实践了一遍,做的时候也发现了很多问题,输入时不能出现一点错误,一旦出错,程序将运行不出来。
做实验报告时选取了其中的一部分,从中体会到了很多上课体会不到的东西。