- pdf下载:明码7281
- 专栏目录首页:【专栏必读】(考研复试)数据库系统概论第五版(王珊)专栏学习笔记目录导航及课后习题答案详解
一:对于视图
(1)什么视图
视图:视图是一个虚表,其本质就是一条SELECT
语句,而查问后果被赋予了一个名字,也即视图名字。或者说视图自身不蕴含任何数据,它只蕴含映射到基表的一个查问语句,当基表数据发生变化时,视图数据也随之变动。其目标就是在于不便,简化数据操作
(2)什么时候会用到视图
简略点说,当咱们感觉查问语句太过简单且不好操控时就能够创立视图,间接
SELECT * FROM [view]
(3)视图的作用
- 视图可能简化用户的操作
- 视图使用户能以多种角度对待同一数据
- 视图对重构数据库提供了肯定水平的逻辑独立性
- 视图可能对秘密数据提供平安爱护
- 适当的利用视图能够更清晰的表白查问
二:视图的定义和删除
(1)建设视图
语法:应用CREATE VIEW
语句创立视图,格局如下
- 子查问能够是任意的
SELECT
语句(是能够含有ORDER BY
子句和DISTINCT
短语取决于具体零碎) - 组成视图的属性列名要么全副省略要么全副指定,不能有第三种状况
- 如果省略视图列名,则其列名默认由
SELECT
子句指标列诸字段组成
A:简略创立
演示:
【例1】建设信息系IS学生的视图
CREATE VIEW IS_studentAS SELECT Sno,Sname,Sage,SdeptFROM studentWHERE Sdept='IS'
B:基于多个基表的视图
演示:
【例2】建设计算机科学系选修了1号课程的学生视图
CREATE VIEW CS1ASSELECT student.Sno Sno,Sname,GradeFROM student,scWHERE Sdept='CS' AND student.Sno=sc.Sno AND sc.Cno='1';
C:基于视图的视图
演示:
【例3】 建设计算机科学系选修了1号课程且问题大于95分的学生的视图
CREATE VIEW CS2ASSELECT *FROM CS1WHERE Grade > 95;
D:带表达式的视图
演示:
【例4】定义一个反映学生出世年份的视图
CREATE VIEW birthday(Sno,Sname,Syear)ASSELECT Sno,Sname,2022-SageFROM student;
E:分组视图
- 带有汇集函数和
GROUP BY
演示:
【例5】将学生的学号及他的均匀问题定义为一个视图
CREATE VIEW stu_grade_avg(Sno,Savg)ASSELECT Sno,AVG(Grade)FROM scGROUP BY Sno;
(2)删除视图
语法:格局如下,须要留神
- 根本表删除之后,由该根本表导出的所有视图均无奈应用,然而视图的定义没有从字典中革除
三:视图的查问
语法:从用户角度登程,查问视图和查问根本表雷同;从DBMS角度登程,采纳视图消解法,具体来讲
- 首先进行有效性查看
- 接着转换成等价的对根本表的查问
- 最初执行修改后的查问
这里具体就不再做过多演示了,一般来说转换是能胜利进行的,更多细节大家能够理解课本(这部分内容不多)
四:视图的更新
语法:视图是虚表,所以对视图的更新最终会转化为对根本表的更新。为了避免用户通过视图对数据进行更新时,无意或无心地对不属于视图范畴内的根本表数据进行操作,能够在定义视图时加上WITH CHECK OPTION
子句。这样在更新时,如果不满足条件,DBMS会回绝操作
(1)UPDATE
演示:
【例6】将信息系学生视图IS_Student
中学号201215125的学生姓名改为“刘辰”
UPDATE is_studentSET Sname='刘辰'WHERE Sno='201215125';
【例7】如果在定义视图is_student
在定义时退出了WITH CHECK OPTION
子句,接着再执行【例6】需要
那么在更新时如果将Sdept
字段改为了'MA'或其余值,DBMS就会拒绝执行,并有上面的谬误反馈
UPDATE is_studentSET Sdept='MA'WHERE Sno='201215125';
如果在更新时只批改名字,那么就没有问题
UPDATE is_studentSET Sname='德玛'WHERE Sno='201215125';
(2)INSERT
演示:
【例8】向信息系学生视图IS_Student
中插入一个新的学生记录:201215129,赵新,20岁
INSERT INTO is_studentVALUES('201215129','赵新',20);
- 这里视图没有数据,且20插入到了谬误的中央(如果没有
WITH CHECK OPTION
就会导致这些谬误呈现) - 如果如果了
WITH CHECK OPTION
,那么DBMS会拒绝执行
(3)DELETE
- 删除数据时,有无
WITH CHECK OPTION
都是一样的
演示:
【例9】删除学号为201215125的学生
DELETE FROM is_studentWHERE Sno='201215125';