视图和索引数据库实验4.docx
《视图和索引数据库实验4.docx》由会员分享,可在线阅读,更多相关《视图和索引数据库实验4.docx(11页珍藏版)》请在冰豆网上搜索。
视图和索引数据库实验4
数据库基础与实践实验报告
实验四视图与索引
班级:
惠普测试142
学号:
********13
*******
日期:
2016—11-13
1实验目得:
1)掌握SQL进行视图创建得方法;
2)掌握SQL进行视图更新得方法,理解视图更新受限得原因;
3)掌握SQL进行索引创建及删除得方法、
2实验平台:
操作系统:
Windows xp。
实验环境:
SQLServer2000以上版本。
3 实验内容与步骤
利用实验一创建得sch_id数据库完成下列实验内容。
1.定义视图V_TCS(定义时不加withcheckoption),存放全部计算机系老师得信息。
视图定义代码:
CREATEVIEW V_TCS AS
ﻩSELECTtno,tn,sex,age,prof,sal,comm,T.dno
FROM T,D
WHERET、dno=D.dnoAND D.dn=’计算机'
视图查询语句与查询结果截图:
SELECT*FROM V_TCS
2.定义视图V_sal,存放全体教师得教师号,教师姓名,教师酬金(工资+岗位津贴),职称信息。
视图定义代码:
CREATEVIEWV_salAS
SELECTtno教师号,tn教师姓名,sal+comm教师酬金,prof支撑信息
FROM T
视图查询语句与查询结果截图:
SELECT* FROMV_sal
3.向V_TCS中插入一条计算机专业教师得新记录,并查询V_TCS视图得全部记录。
视图更新代码:
INSERTINTOV_TCS
SELECT'T10','良瑗’,'女’,20,'讲师',6000,8000,D.dno
FROMD
ﻩWHERED。
dn='计算机'
视图查询语句与查询结果截图:
SELECT* FROMV_TCS
4.向V_TCS中插入一条信息专业教师得新记录,并查询V_TCS视图得全部记录。
视图更新代码:
INSERTINTOV_TCS
ﻩSELECT'T11’,'百里登风',’男',21,’讲师',6000,8000,D。
dno
FROMD
WHERE D.dn='信息’
视图查询语句与查询结果截图:
SELECT* FROMV_TCS
SELECT*FROMTWHEREtno='T11'
5.修改V_TCS中得记录,使得编号为t2得教师得职称为副教授。
视图更新代码:
UPDATE V_TCSSETprof='副教授'WHEREtno='T2’
视图查询语句与查询结果截图:
SELECT*FROMV_TCSWHEREtno='T2'
6.定义视图V_TCS_ck(定义时加with checkoption),存放全部计算机系老师得信息,对比该视图与V_TCS在进行数据更新时得差别、
视图定义代码:
CREATEVIEWV_TCS_ck AS SELECT tno,tn,sex,age,prof,sal,m,T。
dno
FROMT,D
WHERET.dno=D。
dnoANDD、dn=’计算机’
WITHCHECKOPTION
视图更新对比实验代码及运行结果截图:
—-1、能插入
INSERT INTOV_TCS_ck
SELECT ’T12','良莠','女’,20,'讲师’,4000,4000,D、dno
ﻩFROMD
ﻩWHERED。
dn=’计算机'
——2。
不能插入(视图CHECKOPTION约束)
INSERTINTOV_TCS_ck
SELECT ’T13',’天明’,'男’,25,’讲师’,4000,4000,D.dno
ﻩFROMD
WHERE D。
dn='信息'
7.在课程C表得课程名属性上按降序创建唯一索引I_cn、
索引定义代码:
CREATE INDEX I_cn ON C(cnDESC)
运行结果截图:
8.删除C表上得索引I_cn。
索引删除代码:
DROPINDEXC。
I_cn
运行结果截图:
4深入思考与讨论
1)请先自己定义一个视图,使定义该视图得查询中使用连接。
再更新该视图,观察视图更新受限情况。
——1、定义:
CREATEVIEWV_SCAS
ﻩSELECT sn,S、sno,cn,score
ﻩFROMS,C,SC
WHERES。
sno=SC、sno AND C.cno=SC.cno
—-2.查询:
SELECT* FROMV_SC
—-3、均无法插入(插入影响到多张表):
INSERTINTOV_SC VALUES(’笑笑',’S1','JAVA',99)
INSERTINTOV_SCVALUES('笑笑’,’S1',’RUBY',99)
INSERTINTOV_SCVALUES('良垣’,’S15’,'JAVA',99)
INSERTINTOV_SCVALUES(’良莠’,'S1',’JAVA',99)
SELECT*FROMV_SCWHEREsno='S1’
--4。
可以更新(修改分数只影响到SC一张表):
UPDATEV_SCSETV_SC、score=99 WHEREV_SC。
cn='大学英语'ANDV_SC.sno='S1’
SELECT*FROM V_SCWHEREsno='S1'
--5。
无法更新年龄(视图V_SC不包含age列):
UPDATEV_SCSETage=18 WHEREV_SC.sno='S1'
——6、无法更新,修改会影响到S与SC两张表:
UPDATEV_SCSETsn='韩笑',score=98WHEREV_SC.sno='S1’
—-7。
将成绩为NULL得课程名设为NULL,更新失败(遵守基表C得cn列得NOTNULL约束):
UPDATEV_SCSETcn=NULLWHEREscoreISNULL
2)请先自己定义一个视图,使定义该视图得查询带分组与集函数。
再更新该视图,观察视图更新受限情况。
-—1。
定义:
CREATEVIEWV_SC_gpAS
SELECT sn,S。
sno,AVG(score)avg_score
ﻩFROMS,C,SC
ﻩWHERES。
sno=SC、snoAND C.cno=SC。
cno
ﻩGROUPBYsn,S、sno
-—2.查询:
SELECT*FROMV_SC_gp
—-3、无法插入:
INSERTINTOV_SC_gpVALUES(’刘静','S8’,88)
—-4、无法更新(avg_score集函数列):
UPDATE V_SC_gpSETavg_score=88 WHEREsn='小明’
--5、无法更新(视图包含聚集函数、GROUP BY子句):
UPDATEV_SC_gpSETsn=’小小云'WHEREsn='小明'