数据库原理实验报告分析.docx

上传人:b****4 文档编号:27508365 上传时间:2023-07-02 格式:DOCX 页数:22 大小:241.94KB
下载 相关 举报
数据库原理实验报告分析.docx_第1页
第1页 / 共22页
数据库原理实验报告分析.docx_第2页
第2页 / 共22页
数据库原理实验报告分析.docx_第3页
第3页 / 共22页
数据库原理实验报告分析.docx_第4页
第4页 / 共22页
数据库原理实验报告分析.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

数据库原理实验报告分析.docx

《数据库原理实验报告分析.docx》由会员分享,可在线阅读,更多相关《数据库原理实验报告分析.docx(22页珍藏版)》请在冰豆网上搜索。

数据库原理实验报告分析.docx

数据库原理实验报告分析

2013级

数据库原理

实验报告

 

专业:

_______计算机___

班级:

________________

学号:

______________

姓名:

_______________

2015年5月

实验一SQLServer2005基本操作

一、实验目的

了解SQLServer2005组件;

了解SQLServer数据库组成;

掌握SQLServer2005界面基本操作。

二、实验内容

(1)开始->程序->MicrosoftSQLServer2005->SQLServerManagementStudio,打开后进入到SQLServer2005主体界面

(2)点击“数据库”前面的“+”,可以展开查看数据库,并且可以继续展开下级目录,查看数据库中的表、视图等。

(3)了解SQLServer2005菜单栏的一些主要工具的使用。

(4)学生动手操作SQLServer2005,打开数据库,打开表,打开查询界面;查看数据库的属性、表的属性等。

三、实验总结

进行这次实验有遇到什么问题?

怎么解决的?

答:

此次实验我们一步一步按照实验内容操作的,基本上没有遇到问题。

实验二数据定义

一、实验目的

掌握SQLServer2005的数据库创建;

掌握SQLServer数据定义语言;

掌握SQLServer2005数据定义的SQL语言定义与管理器定义两种方式。

二、实验内容

(1)创建、修改、删除数据库。

创建要求:

数据库Employee中包含一个数据库文件Empdat1.mdf和一个日志文件Emplog.ldf。

其中,数据文件大小为10MB,最大为50MB,以5MB速度增长;日志文件大小为5MB,最大为25MB,以5%速度增长。

修改要求:

增加第二个数据库文件Empdat2.ndf,其中,数据文件大小为5MB,最大为25MB,以2MB速度增长。

(2)利用SQL创建人员表person、月薪表salary及部门表dept。

见上页图

要求:

按表2-1、表2-2及表2-3中的字段说明创建。

表2-1person表结构

字段名

数据类型

字段长度

允许空否

字段说明

P_no

Char

6

NotNull

工号,主键

Sex

Char

2

NotNull

性别

BirthDate

Datetime

Null

出生日期

Prof

Varchar

10

Null

职称

Deptno

Char

4

NotNull

部门代码,外键(参照dept表)

表2-2Salary表结构

字段名

数据类型

字段长度

允许空否

字段说明

P_no

Char

6

NotNull

工号,主键,外键(参照person表)

Base

Dec

5

Null

基本工资

Bonus

Dec

5

Null

奖金,要求>50

Fact

实发工资=基本工资+奖金

Month

Int

NotNull

月份

表2-3dept表结构

字段名

数据类型

字段长度

允许空否

字段说明

Deptno

Char

4

NotNull

部门代码,主键

Dname

Varchar

10

NotNull

部门名称

createtabledept(

DeptnoChar(4)NotNull,primarykey(Deptno),

DnameVarchar(10)NotNull,

createtableperson(

P_noChar(6)NotNull,primarykey(P_no),

P_nameVarchar(10)NotNull,

SexChar

(2)NotNull,

BirthDateDatetimeNull,

ProfVarchar(10)Null,

DeptnoChar(4)NotNull,foreignkey(Deptno)referencesdept(Deptno),

createtableSalary(

P_noChar(6)NotNull,foreignkey(P_no)referencesperson(P_no),

BaseDec(5)Null,

BonusDec(5)Null,

FactasBase+Bonus,

MonthIntNotNull,

check(Bonus>50),

(3)利用SQL语句创建视图。

要求:

在基表person上创建员工视图PersonView,其中包含工号、姓名、性别、职称和部门代码等字段。

createviewPersonView(P_no,P_name,Sex,Prof,Deptno)

as

selectP_n,P_name,Sex,Prof,Deptno

fromperson

(4)创建索引。

要求:

①在人员表的姓名列上创建一个单列索引name_sort

createindexname_sort

onperson(P_name);

②在人员表的出生日期列和姓名列上创建一个组合索引birth_name

createclusteredindexbirth_name

onperson(BirthDate,P_name);

③在人员表的姓名列上创建一个唯一索引u_name_sort

createuniqueindexu_name_sort

onperson(P_name);

创建月薪表上基于fact的索引fact_idx

createindexfact_idx

onsalary(fact);

(5)删除索引。

要求:

删除月薪表上的索引fact_idx

dropindexsalary.fact_idx;

三、实验总结

1.在表的创建的时候要注意什么问题?

答:

完整性约束语的应用语法,

表间关系,和建立顺序。

2.自己在这次实验中遇到什么问题?

怎么解决的?

答:

视图和索引的标点要不要加的问题。

多尝试找到正确的。

实验三数据操作

一、实验目的

掌握SQLServer的数据操作语言;

掌握SQLServer数据操作的管理器处理方式;

掌握SQLServer2005定义视图语言。

二、实验内容

(1)利用SQL语句向表person、salary和dept中插入数据。

要求:

按表3-1、表3-2及表3-3中的数据插入。

表3-1表person中的数据

P_no

P_name

Sex

BirthDate

Prof

Deptno

000001

王云

1973-4-7

中级

0001

000002

谢志文

1975-2-14

中级

0001

000003

李浩然

1970-8-25

高级

0002

000004

廖小玲

1979-8-6

初级

0002

000005

梁玉琼

1970-8-25

中级

0003

000006

罗向东

1979-5-11

初级

0003

000007

肖家庆

1963-7-14

高级

0003

000008

胡溧阳

1979-6-15

中级

0001

000009

肖丽丽

1968-8-19

中级

0002

000010

黄剑祥

1965-9-19

高级

0003

表3-2表salary中的数据

P_no

Base

Bonus

Fact

Month

000001

2100

300

1

000002

1800

300

1

000003

2800

280

1

000004

2500

250

1

000005

2300

275

1

000006

1750

130

1

000007

2400

210

1

000008

2900

200

1

000009

2700

210

1

000010

2300

210

1

表2-3表dept中的数据

Deptno

Dname

0001

人事部

0002

财务部

0003

市场部

insert

intodept(Deptno,Dname)

values('0001','人事部')

insert

intoperson(P_no,P_name,Sex,BirthDate,Prof,Deptno)

values('000001','王云','男',1973-4-7,'中级','0001')

insert

intosalary(P_no,Base,Bonus,Month)

values('000001',2100,300,1)

(2)用SQL语句修改表中的数据。

要求:

将salary表中工号为000006的员工工资增加为1800,奖金增加为160。

updatesalary

setBase=1800,Bonus=160

whereP_no='000006'

(3)用SQL语句删除表中的数据。

要求:

删除person表中工号为000010的员工数据

delete

fromsalary

whereP_no='0000010'

delete

fromperson

whereP_no='0000010'

(4)更新视图。

要求:

将员工视图PersonView中姓名为王云的员工职称改为高级。

updatePersonView

setProf='高级'

whereP_name='王云'

(5)向视图插入数据。

要求:

向视图PersonView中插入一行数据(‘000011’,‘刘美萍’,‘女’,‘中级’,‘0002’)。

insert

intoPersonView(P_no,P_name,Sex,Prof,Deptno)

values('000011','刘美萍','女','中级','0002')

(6)删除视图。

要求:

将视图PersonView删除。

dropViewPersonView;

三、实验总结

1.在删除员工工号为“000010”的员工数据时遇到了什么问题?

必须怎么处理?

答:

Person表被salary表引用,所以不能执行该命令。

必须先将salary表中的员工工号为“000010”的员工数据删除,才能删除Person表中员工工号为“000010”的员工数据。

2.对于三个表来说,插入数据的顺序应该是怎样的?

答:

先插入表dept,再插入Person表,最后插入salary表。

实验四数据查询

一、实验目的

掌握SQLServer的数据查询语言;

掌握SQL语言在不同情况下的灵活应用。

二、实验内容

(1)利用SQL语句查询person表中的所有数据。

select*

fromperson;

(2)条件查询。

要求:

①查询person表中所有不重复的职称

selectdistinctProf

fromperson

②查询person表中职称为中级的所有员工数据

select*

fromperson

whereProf='中级'

③查询person表中具有高级职称的男员工信息

select*

fromperson

whereprof='高级'andSex='男';

④查询person表中姓名为王云、谢志文或罗向东的员工数据

select*

fromperson

whereP_name='王云'orP_name='谢志文'orP_name='罗向东'

(3)使用ORDERBY排序

要求:

利用SQL语句将工号在000003和000008之间的员工的月收入按实发工资升序排列。

selectFact

fromSalary

whereP_nobetween'000003'and'000008'

orderbyFactasc

(4)查询工号为000002的员工的基本工资改为原来的2倍,奖金改为原来的1.5倍后的实际收入。

//先执行修改update再查询

//直接在select中用表达式fact=Base*2+Bonus*1.5

selectFact=Base*2+1.5*Bonus

fromSalary

whereP_no='000002'

(5)利用SQL语句查询各部门的实发工资总数。

selectDname,sum(Fact)实发工资总数

fromperson,salary,dept

whereperson.P_no=salary.P_no

andperson.Deptno=dept.Deptno

groupbyDname

(6)利用SQL语句查询1月份发放奖金平均数大于200元的部门,并从低到高排序。

selectDname,avg(Bonus)ssl

fromdept,salary,person

whereSalary.P_no=person.P_no

anddept.Deptno=person.Deptno

andMonth=1

groupbyDnamehavingavg(Bonus)>200

orderbyssl/*avg(Bonus)*/asc

(7)查询人事部所有员工信息。

select*

fromperson,Salary,dept

whereSalary.P_no=person.P_no

anddept.Deptno=person.Deptno

andDname='人事部'

(8)查询person表中职称为中级的员工信息。

select*

fromperson

whereProf='中级'

(9)查询每个员工1月份的工资和奖金。

selectBase,Bonus

fromSalary

whereMonth=1

(10)查询比工号为000005的员工实发工资高的所有员工信息。

select*

fromperson,dept,Salary

whereSalary.P_no=person.P_no

anddept.Deptno=person.Deptno

andFact>

selectFact

fromSalary,person,dept

whereSalary.P_no=person.P_no

anddept.Deptno=person.Deptno

andperson.P_no='000005'

(11)查询比部门0003所有员工实发工资都高的员工。

selectP_name

fromperson,dept,Salary

whereSalary.P_no=person.P_no

anddept.Deptno=person.Deptno

andFact>

selectmax(Fact)

fromSalary,person,dept

whereSalary.P_no=person.P_no

anddept.Deptno=person.Deptno

anddept.Deptno='0003'

(12)查询实发工资比平均实发工资高的员工工号及实发。

selectperson.P_no,Fact

fromSalary,person,dept

whereSalary.P_no=person.P_no

anddept.Deptno=person.Deptno

andFact>

selectavg(Fact)maxl

fromSalary,person,dept

whereSalary.P_no=person.P_no

anddept.Deptno=person.Deptno

/*groupbyDname/*havingavg(Fact)*/*/

(13)使用UNION查询。

要求:

利用SQL语句分别查询具有高、中级职称的职工姓名,合并输出。

selectP_name

fromperson

whereProf='中级'

union

selectP_name

fromperson

whereProf='高级'

三、实验总结

1.在查询的语句中,如果涉及到的属性列多个表都有,那应该怎么处理?

答:

用‘表名.属性列名’来指定用哪个列的数据来完成操作。

2.如果查询的数据列没有列名,为了明白查询的数据是什么含义,可以怎样处理?

答:

可以用‘数据列数据数据列名’的方式给数据列附上列名。

3.写出SQL语言完整的查询语句,并标出DBMS执行的先后顺序。

答:

先执行from语句,再执行where语句的执行条件,有groupby的执行分组操作和having语句里的表达式,最后输出select里有的数据列里的数据。

实验五数据完整性与管理

一、实验目的

理解数据完整性的意义;

掌握数据备份方法;

掌握数据库恢复方法。

二、实验内容

(1)学生实践创建规则的语言使用;

CREATERULEsex_ruleAS@sexIN('男','女')--游离规则。

Sp_bindrule'sex_rule','person.sex'--绑定规则--已将规则绑定到表的列。

Sp_unbindrule'person.sex'--解除绑定。

DROPRULEsex_rule--删除规则。

(2)对数据库中的数据进行更新、删除操作,测试是否会成功;如果不成功,分析数据库操作失败的原因;

A.测试对主表进行插入、更新及删除操作时的影响。

要求:

1表dept中插入一行数据(‘0004’,‘研发部’),测试是否影响从表。

insert

intodept(Deptno,Dname)

values('0004','研发部')

//不影响,插入成功,因为是新插入的一行数据,所以对从表不受影响

2表dept中的部门号0003改为0006,测试是否影响从表。

updatedept

setDeptno='0006'

whereDeptno='0003'

//影响,不成功,person表中有部门号这个属性,所以会受到牵制,需先改变dept表中的数据。

显示:

UPDATE语句与REFERENCE约束"FK__person__Deptno__7F60ED59"冲突。

该冲突发生于数据库"Employee",表"dbo.person",column'Deptno'。

语句已终止。

③删除表dept中部门号为0001的员工数据,测试是否影响从表。

delete

fromdept

whereDeptno='0001'

//影响,不成功,person表中有部门号这个属性,所以会受到牵制,需先改变dept表中的数据。

显示:

DELETE语句与REFERENCE约束"FK__person__Deptno__7F60ED59"冲突。

该冲突发生于数据库"Employee",表"dbo.person",column'Deptno'。

语句已终止。

B.测试对从表进行插入、更新及删除操作时的影响。

要求:

1表person中插入一行数据(‘000012’,‘宋全礼’,‘男’,‘1980-7-17’,‘初级’,‘0005’),测试是否违背参照完整性。

insert

intoperson(P_no,P_name,Sex,BirthDate,Prof,Deptno)

values('000012','宋全礼','男',1980-7-17,'初级','0005')

//影响,不成功,dept表中有部门号这个属性,为外码,所以会受到牵制,需先处理dept表

显示:

INSERT语句与FOREIGNKEY约束"FK__person__Deptno__7F60ED59"冲突。

该冲突发生于数据库"Employee",表"dbo.dept",column'Deptno'。

语句已终止。

②将表person中工号为000002的员工所在部门更新为0005,测试是否违背参照完整性。

updateperson

setDeptno='0005'

whereP_no='000002'

//影响,不成功,dept表中有部门号这个属性,为外码,所以会受到牵制,需先处理dept表

显示:

UPDATE语句与FOREIGNKEY约束"FK__person__Deptno__7F60ED59"冲突。

该冲突发生于数据库"Employee",表"dbo.dept",column'Deptno'。

语句已终止。

③删除表person中工号为000005的员工数据,测试是否违背参照完整性。

delete

fromperson

whereP_no='000005'

//影响,不成功,dept表中有部门号这个属性,为外码,所以会受到牵制,需先处理dept表

显示:

DELETE语句与REFERENCE约束"FK__Salary__P_no__014935CB"冲突。

该冲突发生于数据库"Employee",表"dbo.Salary",column'P_no'。

语句已终止。

(3)数据备份和恢复操作。

三、实验总结

1.数据库的完整性包含哪些完整性约束?

在SQL语言里面分别是用哪些关键词实现的?

答:

域完整性:

实现域完整性可以通过:

核查约束“check约束”、外键约束“foreignkey约束”、默认值约束“default约束”、非空约束“notnull约束”等来实施。

实体完整性:

列的Identity属性、主键约束“primanykey约束”、惟一性约束“unique约束”等来实现。

参照完整性:

可以通过“外键约束”、“触发器”、“存储过程”等来实施。

2.数据库备份有什么好处?

答:

如操作失误或数据丢失,可回到之前的数据状态。

 

实验心得

(字体:

宋体小四;段落:

首行缩进2字符、行距:

固定值20磅)

通过这次的数据库原理实验,让我了解了SQLServer2005组件、SQLServer数据库组成,数据库的属性,表的属性;掌握SQLServer2005界面的基本操作,掌握了解SQLServer数据定义语言;学会了SQLServer2005的数据库创建、修改、删除,SQLServer的数据操作语言,SQLServer数据操作的管理器处理方式,以及SQLServer2005定义视图语言、数据查询语言、数

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

当前位置:首页 > 法律文书 > 辩护词

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

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