视图和索引(数据库实验4)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库基础与实践实验报告实验四视图和索引
班级:惠普测试142
学号:**********
姓名:***
日期:2016-11-13
1 实验目的:
1)掌握SQL进行视图创建的方法;
2)掌握SQL进行视图更新的方法,理解视图更新受限的原因;
3)掌握SQL进行索引创建及删除的方法。
2 实验平台:
操作系统:Windows xp。
实验环境:SQL Server 2000以上版本。
3 实验内容与步骤
利用实验一创建的sch_id数据库完成下列实验内容。
1.定义视图V_TCS(定义时不加with check option),存放全部计算机系老师的信息。
视图定义代码:
CREATE VIEW V_TCS AS
SELECT tno,tn,sex,age,prof,sal,comm,T.dno
FROM T,D
WHERE T.dno=D.dno AND D.dn='计算机'
视图查询语句与查询结果截图:
SELECT*FROM V_TCS
2.定义视图V_sal,存放全体教师的教师号,教师姓名,教师酬金(工资+岗位津贴),职称信息。视图定义代码:
CREATE VIEW V_sal AS
SELECT tno教师号,tn教师姓名,sal+comm教师酬金,prof支撑信息
FROM T
视图查询语句与查询结果截图:
SELECT*FROM V_sal
3.向V_TCS中插入一条计算机专业教师的新记录,并查询V_TCS视图的全部记录。视图更新代码:
INSERT INTO V_TCS
SELECT'T10','良瑗','女',20,'讲师',6000,8000,D.dno
FROM D
WHERE D.dn='计算机'
视图查询语句与查询结果截图:
SELECT*FROM V_TCS
4.向V_TCS中插入一条信息专业教师的新记录,并查询V_TCS视图的全部记录。视图更新代码:
INSERT INTO V_TCS
SELECT'T11','百里登风','男',21,'讲师',6000,8000,D.dno
FROM D
WHERE D.dn='信息'
视图查询语句与查询结果截图:
SELECT*FROM V_TCS
SELECT*FROM T WHERE tno='T11'
5.修改V_TCS中的记录,使得编号为t2的教师的职称为副教授。
视图更新代码:
UPDATE V_TCS SET prof='副教授'WHERE tno='T2'
视图查询语句与查询结果截图:
SELECT*FROM V_TCS WHERE tno='T2'
6.定义视图V_ TCS_ck(定义时加with check option),存放全部计算机系老师的信息,对比该视图
与V_TCS在进行数据更新时的差别。
视图定义代码:
CREATE VIEW V_TCS_ck AS SELECT tno,tn,sex,age,prof,sal,comm,T.dno FROM T,D
WHERE T.dno=D.dno AND D.dn='计算机'
WITH CHECK OPTION
视图更新对比实验代码及运行结果截图:
--1.能插入
INSERT INTO V_TCS_ck
SELECT'T12','良莠','女',20,'讲师',4000,4000,D.dno
FROM D
WHERE D.dn='计算机'
--2.不能插入(视图CHECK OPTION约束)
INSERT INTO V_TCS_ck
SELECT'T13','天明','男',25,'讲师',4000,4000,D.dno
FROM D
WHERE D.dn='信息'
7.在课程C表的课程名属性上按降序创建唯一索引I_cn。
索引定义代码:
CREATE INDEX I_cn ON C(cn DESC)
运行结果截图:
8.删除C表上的索引I_cn。
索引删除代码:
DROP INDEX C.I_cn
运行结果截图:
4 深入思考与讨论
1)请先自己定义一个视图,使定义该视图的查询中使用连接。再更新该视图,观察视图更新受限情况。
--1.定义:
CREATE VIEW V_SC AS
SELECT sn,S.sno,cn,score
FROM S,C,SC
WHERE S.sno=SC.sno AND o=o
--2.查询:
SELECT*FROM V_SC
--3.均无法插入(插入影响到多张表):
INSERT INTO V_SC VALUES('笑笑','S1','JAVA',99) INSERT INTO V_SC VALUES('笑笑','S1','RUBY',99) INSERT INTO V_SC VALUES('良垣','S15','JAVA',99) INSERT INTO V_SC VALUES('良莠','S1','JAVA',99)
SELECT*FROM V_SC WHERE sno='S1'
--4.可以更新(修改分数只影响到SC一张表):
UPDATE V_SC SET V_SC.score=99 WHERE V_='大学英语'AND V_SC.sno='S1' SELECT*FROM V_SC WHERE sno='S1'
--5.无法更新年龄(视图V_SC不包含age列):
UPDATE V_SC SET age=18 WHERE V_SC.sno='S1'
--6.无法更新,修改会影响到S和SC两张表:
UPDATE V_SC SET sn='韩笑',score=98 WHERE V_SC.sno='S1'