《SQL Server 数据库开发与实现》三个实验报告.docx
《《SQL Server 数据库开发与实现》三个实验报告.docx》由会员分享,可在线阅读,更多相关《《SQL Server 数据库开发与实现》三个实验报告.docx(32页珍藏版)》请在冰豆网上搜索。
![《SQL Server 数据库开发与实现》三个实验报告.docx](https://file1.bdocx.com/fileroot1/2023-2/4/f3ff0468-4523-4fa1-87ff-982d8e3e143b/f3ff0468-4523-4fa1-87ff-982d8e3e143b1.gif)
《SQLServer数据库开发与实现》三个实验报告
《SQLServer数据库开发与实现》综合实验
目录
实验报告名称:
复杂数据查询方法2
实验报告名称:
事务管理与隔离性6
实验报告名称:
数据库设计18
软件工程系实验报告封面
课程名称:
SQLServer数据库开发与实现
课程代码:
SS2024
实验指导老师:
李明雨
实验报告名称:
复杂数据查询方法
本实验报告包括以下几个内容:
一、实验(实践)目的
二、实验(实践)环境
三、实验(实践)实现过程
四、实验(实践)分析与总结
五、指导教师评语与评分
学生姓名:
学号:
教学班:
FZ02
递交日期:
2012.12.19
我申明,本报告内的实验已按要求完成,报告完全是由我个人完成,并没有抄袭行为。
我已经保留了这份实验报告的副本。
申明人(签名):
吴健伟
实验题目
复杂数据查询方法
实验地点及组别
宿舍
实验时间
2012.12.19
一、实验目的和要求
1、目的
(1)掌握常用函数的使用;
(2)掌握分组统计的使用;
(3)掌握多表的连接查询、嵌套查询技术;
2、要求
设计要求:
1、代码风格良好,保证完成题目要求的功能;
2、语句尽可能简单;
3、要考虑到代码的执行效率;
内容要求:
1.1求PUBS(SQLSERVER样本数据库)中的表sales中平均每一笔销售记录的销售数量(结果列标题为QTY_AVG)。
1.2PUBS(SQLSERVER样本数据库)中的表sales中总共有多少笔销售记录。
(结果列标题为TOTAL_TRANS)
1.3求PUBS(SQLSERVER样本数据库)中的表sales中总的图书销量(结果列标题为TOTAL_QTY)。
1.4求PUBS(SQLSERVER样本数据库)中的表sales中销量最大的一笔记录的销量(结果列标题为MAX_QTY)
1.5求PUBS(SQLSERVER样本数据库)中的表sales中销量最小的一笔记录的销量(结果列标题为MIN_QTY)
2.1求PUBS(SQLSERVER样本数据库)中的表sales中每一种图书的总销量(结果列标题为TOTAL_QTY_PERBOOK)和它对应的标题号(TITLE_ID)。
2.2求PUBS(SQLSERVER样本数据库)中的表sales中每天图书的总销量(结果列标题为TOTAL_QTY_PERDAY)和它对应的日期(ORD_DATE)。
2.3求PUBS(SQLSERVER样本数据库)中的表sales中日期为1994-9-5之后每天图书的总销量(结果列标题为TOTAL_QTY_PERDAY)和它对应的日期(ORD_DATE)。
3.1求PUBS(SQLSERVER样本数据库)中的表sales中每笔记录的销量和它对应的书名(TITLE)
3.2求PUBS(SQLSERVER样本数据库)中的表sales中每笔记录的销量、对应的书名(TITLE)和商店名称(STOR_NAME)
3.3求PUBS(SQLSERVER样本数据库)中的表sales中所在的州为“加利福尼亚”州(’CA’)的那些商店的销量记录.注:
要求使用IN关键字查询。
3.4求PUBS(SQLSERVER样本数据库)中的表Authors中的与作者au_lname=’Stringer’,au_fname=’Dirk’所在的城市相同的所有作者信息
3.5求PUBS(SQLSERVER样本数据库)中的表Authors中的与作者au_lname=’Stringer’,au_fname=’Dirk’所在的城市不同的所有作者信息
二、实验环境(本实验的硬件和软件环境及使用仪器等)
硬件:
PC电脑一台;
配置:
内存,2G及以上硬盘250G及以上
软件环境:
操作系统windows2003
数据库环境:
SQLServer2005中文企业版
三、实验实现过程
1、简单的统计求和等函数的使用(AVG,COUNT,SUM,MAX,MIN);
2、分组统计的使用(GROUPBY);
3、多表的连接查询、嵌套查询。
1.1SELECTavg(QTY)QTY_AVGFROMsales
1.2SELECTcount(QTY)TOTAL_TRANSFROMsales
1.3SELECTsum(QTY)TOTAL_QTYFROMsales
1.4SELECTmax(QTY)MAX_QTYFROMsales
1.5SELECTmin(QTY)MIN_QTYFROMsales
2.1SELECTstor_id,sum(qty)asTOTAL_QTY_PERBOOKFROMsalesgroupbystor_id
2.2SELECTORD_DATE,sum(qty)asTOTAL_QTY_PERDAYFROMsalesgroupbyORD_DATE
2.3SELECTORD_DATE,sum(qty)asTOTAL_QTY_PERDAYFROMsaleswhereORD_DATE>='1994-09-05'groupbyORD_DATE
3.1SELECTtitle_idasTITLE,sum(qty)asTOTAL_QTY_PERDAYFROMsalesgroupbytitle_id
3.2selectqty,titles.title,stores.stor_namefromsalesinnerjointitlesonsales.title_id=titles.title_id
innerjoinstoresonstores.stor_id=sales.stor_id
3.3selectsales.qty,stores.statefromsales
innerjoinstores
onstores.stor_id=sales.stor_id
where(statein('CA'))
3.4select*fromauthorswhere(city<>(selectcityfromauthorswhereau_lname='Stringer'andau_fname='Dirk'))
3.5select*fromauthorswhere(city<>(selectcityfromauthorswhereau_lname='Stringer'andau_fname='Dirk'))
四、实验结果、分析、总结
selectsales.qty,titles.title,stores.stor_namefromsalesinnerjointitlesonsales.title_id=titles.title_id
innerjoinstoresonstores.stor_id=sales.stor_id
在这道题个我犯了两个错误,第一个是消息209,级别16,状态1,第1行
列名'title_id'不明确。
里面的title_id没加上表名sales
第二个是in的使用不熟练导致的
五、实验教师评语及成绩:
教师签名:
批阅时间年月日
软件工程系实验报告封面
课程名称:
SQLServer数据库开发与实现
课程代码:
SS2024
实验指导老师:
李明雨
实验报告名称:
事务管理与隔离性
本实验报告包括以下几个内容:
一、实验(实践)目的
二、实验(实践)环境
三、实验(实践)实现过程
四、实验(实践)分析与总结
五、指导教师评语与评分
学生姓名:
学号:
教学班:
FZ02
递交日期:
2012.12.19
我申明,本报告内的实验已按要求完成,报告完全是由我个人完成,并没有抄袭行为。
我已经保留了这份实验报告的副本。
申明人(签名):
吴健伟
实验题目
事务管理与隔离性
实验地点及组别
宿舍
实验时间
2012.12.19
一、实验目的和要求
1、目的
(1)理解事务的概念及事务的结构,掌握事务的使用方法;
(2)了解事物并发造成的数据不一致的种类;
(3)掌握数数据隔离性的分类和使用方法;
2、要求
设计要求:
1、代码风格良好,保证选择的隔离性种类能够完成题目要求的功能;
2、语句尽可能简单;
3、要考虑到代码的执行效率;
内容要求:
(1)、事物管理
创建test数据库:
createdatabasetest
go
usetest
go
创建三个数据表:
createtablestudent(student_idchar(15),班号char(15),
namechar(20),性别char(5),birthdaydatetime)
createtableclass(班号char(15),系号int,专业char(20),
班长char(20),层次char(10),入学时间datetime)
createtablegrade(学号char(15),课程号char(15),成绩int)
以上三个表创建成功以后,则执行下面插入语句:
Insertintostudentvalues('0640021136','1','王小明','男','1980-2-1')
给Student表的birthday字段创建CHECK约束,使输入的生日小于系统日期,在新建查询中执行如下语句:
USEtest
GO
准备工作已完成,开始下边的试验:
(1) 比较以非事务方式及事务方式执行SQL脚本的异同
1) 以事务方式修改Student表中学号为“0640021136”同学的姓名改为‘王明’及出生年月改为当前日期加1。
USEtest
GO
执行完上述脚本后,查看对表student中学号为“0640021136”的记录的影响。
注意在前面的实验中,Student表的birthday字段己经加了CHECK约束。
2) 以非事务方式执行同上的语句。
USEtest
GO
再执行上述脚本,查看表Student中学号为“0640021136”的记录。
注意比较两种执行方式对执行结果的影响有何不同。
(2) 比较以事务方式及非事务方式向表中插人数据
Class表
班号
系号
专业
班长
层次
入学时间
0346312
11
信管032
本科
2003
Student表:
学号
班号
姓名
性别
出生年月
034631201
0346312
陈岩清
男
2006-1-1
Grade
学号
课程号
成绩
994631206
12110001
85
1) 以事务方式向表中插入记录:
A. 无保存点方式:
USEtest
GO
B. 有保存点方式:
USEtest
GO
分别执行以上脚本,分析回滚操作在有无保存点时如何影响事务不同部分的3条insert语句。
2) 以非事务方式向表中插入记录:
USEtest
GO
再执行上述脚本,查看三条insert语句执行的结果。
注意比较事务与非事务两种执行方式对执行结果的影响有何不同。
3、掌握事务隔离性的级别
准备:
先创建一个test数据库,建立一个名为’员工信息’表,插入如下数据:
另外创建一张表:
部门信息(部门编号char(4),部门名称char(8));并插入数据('1001','人事部')
1、读脏数据:
分别在两个窗口中打开两个事务,执行如下代码,则发现并发的两个事务,存在读脏数据的现象:
窗口1:
(1)
select员工姓名from员工信息where员工姓名='张三'
go
SETTRANSACTIONISOLATIONLEVELREADUNCOMMITTED
(3)
select员工姓名from员工信息where员工姓名='张三'
go
(5)
select员工姓名from员工信息where员工姓名='张三'
go
窗口2:
(2)
begintran
update员工信息
set员工姓名='张三'
go
(4)
rollbacktran
go
2、(避免脏读)
分别在两个窗口中打开两个事务,第一个事务设置隔离性级别为SETTRANSACTIONISOLATIONLEVELREADCOMMITTED(只能够读取已经提交的数据)
窗口1:
(1)
SETTRANSACTIONISOLATIONLEVELREADCOMMITTED
Go
Begintran
select员工姓名from员工信息where员工姓名='张三'
go
(3)
select员工姓名from员工信息where员工姓名='张三'
go
committran
go
窗口2:
(2)
begintran
update员工信息set员工姓名='张三'
go
(4)
Rollbacktran
go
3、幻想
分别在两个窗口中打开两个事务,第一个事务设置隔离性级别为SETTRANSACTIONISOLATIONLEVELREPEATABLEREAD
窗口1:
(1)
SETTRANSACTIONISOLATIONLEVELREPEATABLEREAD
go
begintran
select员工姓名from员工信息where员工姓名='张三'
go
(3)
select员工姓名from员工信息where员工姓名like'张%'
go
(5)
select员工姓名from员工信息where员工姓名like'张%'
go
commit
窗口2:
(2)
insertinto员工信息values('1003','张小五','男','1980-1-1','2008-1-1','1002')
go
(4)
insertinto员工信息values('1004','张小六','女','1982-1-2','2008-1-1','1002')
go
4、死锁:
分别打开两个连接,并发执行两个事务,产生死锁,则自动撤销一个事务做为牺牲品;
连接1连接2
begintran
update员工信息
set员工姓名=’王五’
where员工编号=’1001’
begintran
update部门信息
set部门名称=’采购部’
where部门编号=’1001’
begintran
update部门信息
set部门名称=’人事部’
where部门编号=’1001’
commit
begintran
update员工信息
set员工姓名=’赵六’
where员工编号=’1001’
commit
二、实验环境(本实验的硬件和软件环境及使用仪器等)
硬件:
PC电脑一台;
配置:
内存,2G及以上硬盘250G及以上
软件环境:
操作系统windows2003
数据库环境:
SQLServer2005中文企业版
三、实验实现过程
准备
createdatabasetest
go
usetest
go
createtablestudent(student_idchar(15),班号char(15),
namechar(20),性别char(5),birthdaydatetime)
createtableclass(班号char(15),系号int,专业char(20),
班长char(20),层次char(10),入学时间datetime)
createtablegrade(学号char(15),课程号char(15),成绩int)
Insertintostudentvalues('0640021136','1','王小明','男','1980-2-1')
USEtest
再给Student表的birthday字段创建CHECK约束,为:
Altertablestudentaddconstraintcheck_b
Check(birthday1.1)以事务方式修改Student表:
Begintran
updatestudentsetname='王明'
wherestudent_id='0640021136'
updatestudentsetbirthday=getdate()+1
wherestudent_id='0640021136'
if@@error!
=0
rollbacktran
else
commit
2)以非事务方式执行同上的语句:
updatestudentsetname='王明'
wherestudent_id='0640021136'
updatestudentsetbirthday=getdate()+1
wherestudent_id='0640021136'
2.以事务方式向表中插人数据:
1)A.无保存点方式:
Begintran
insertintoclass(班号,系号,专业,层次,入学时间)values('0346312',11,'信管','本科','2003')
insertintostudentvalues('034631201','0346312','陈岩清','男','2006-1-1')
insertintogradevalues('994631206','12110001',85)
if@@error=0
Rollbacktran
Else
Commit
B.有保存点方式:
Begintrantran_e
insertintoclass(班号,系号,专业,层次,入学时间)values('0346312',11,'信管','本科','2003')
savetranint_point
insertintostudentvalues('034631201','346312','陈岩清','男','2006-1-1')
insertintogradevalues('994631206','12110001',85)
if@@error=0
Rollbacktranint_point
go
Committrantran_e
go
以非事务方式向表中插入记录:
insertintoclass(班号,系号,专业,层次,入学时间)values('0346312',11,'信管','本科','2003')
insertintostudentvalues('034631201','0346312','陈岩清','男','2006-1-1')
insertintogradevalues('994631206','12110001',85)
createtable员工信息(员工编号char(4),员工姓名varchar(10),
性别char
(2),出生年月datetime,入职时间datetime,部门编号char(3))
createtable部门信息(部门编号char(4),部门名称char(8))
insertinto部门信息values('1001','人事部')
窗口1
select员工姓名from员工信息where员工姓名='张三'
go
SETTRANSACTIONISOLATIONLEVELREADUNCOMMITTED
select员工姓名from员工信息where员工姓名='张三'
go
select员工姓名from员工信息where员工姓名='张三'
go
窗口2
begintranupdate员工信息set员工姓名='张三'
go
rollbacktran
go
窗口1
SETTRANSACTIONISOLATIONLEVELREADCOMMITTED
Go
Begintran
select员工姓名from员工信息where员工姓名='张三'
go
select员工姓名from员工信息where员工姓名='张三'
go
committran
go
Begintran
update员工信息
set员工姓名='张三'
go
rollbacktran
go
SETTRANSACTIONISOLATIONLEVELREADCOMMITTED
Go
Begintran
select员工姓名from员工信息where员工姓名='张三'
go
select员工姓名from员工信息where员工姓名like'张三'
Go
窗口2
insertinto员工信息values(103,'张小五','1980-1-1','2008',102)
go
insertinto员工信息values(103,'张小六','1982-1-1','2009',102)
begintran
update员工信息
set员工姓名='王五'
where员工编号='1001'
begintran
update部门信息
set部门名称='人事部'
where部门编号='1001'
commit
begintran
update部门信息
set部门名称='采购部'
where部门编号='1001'
begintran
update员工信息
set员工姓名='赵六'
where员工编号='1001'
commit
四、实验结果、分析、总结
五、实验教师评语及成绩:
教师签名:
批阅时间年月日
软件工程系实验报告封面
课程名称:
SQLServer数据库开发与实现
课程代码:
SS2024
实验指导老师:
李明雨
实验报告名称:
数据库设计
本实验报告包括以下几个内容:
一、实验(实践)目的
二、实验(实践)环境
三、实验(实践)实现