《SQL Server 数据库开发与实现》三个实验报告.docx

上传人:b****7 文档编号:9412010 上传时间:2023-02-04 格式:DOCX 页数:32 大小:180.82KB
下载 相关 举报
《SQL Server 数据库开发与实现》三个实验报告.docx_第1页
第1页 / 共32页
《SQL Server 数据库开发与实现》三个实验报告.docx_第2页
第2页 / 共32页
《SQL Server 数据库开发与实现》三个实验报告.docx_第3页
第3页 / 共32页
《SQL Server 数据库开发与实现》三个实验报告.docx_第4页
第4页 / 共32页
《SQL Server 数据库开发与实现》三个实验报告.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

《SQL Server 数据库开发与实现》三个实验报告.docx

《《SQL Server 数据库开发与实现》三个实验报告.docx》由会员分享,可在线阅读,更多相关《《SQL Server 数据库开发与实现》三个实验报告.docx(32页珍藏版)》请在冰豆网上搜索。

《SQL Server 数据库开发与实现》三个实验报告.docx

《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

实验指导老师:

李明雨

实验报告名称:

数据库设计

本实验报告包括以下几个内容:

一、实验(实践)目的

二、实验(实践)环境

三、实验(实践)实现

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1