《SQL Server 数据库开发与实现》三个实验报告.docx
- 文档编号:9412010
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:32
- 大小:180.82KB
《SQL Server 数据库开发与实现》三个实验报告.docx
《《SQL Server 数据库开发与实现》三个实验报告.docx》由会员分享,可在线阅读,更多相关《《SQL Server 数据库开发与实现》三个实验报告.docx(32页珍藏版)》请在冰豆网上搜索。
《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(birthday 1.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 实验指导老师: 李明雨 实验报告名称: 数据库设计 本实验报告包括以下几个内容: 一、实验(实践)目的 二、实验(实践)环境 三、实验(实践)实现
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL Server 数据库开发与实现 SQL Server 数据库开发与实现三个实验报告 SQL 数据库 开发 实现 三个 实验 报告