数据库原理实验报告分析.docx
《数据库原理实验报告分析.docx》由会员分享,可在线阅读,更多相关《数据库原理实验报告分析.docx(22页珍藏版)》请在冰豆网上搜索。
数据库原理实验报告分析
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定义视图语言、数据查询语言、数