《关系数据库操作基础.ppt》由会员分享,可在线阅读,更多相关《关系数据库操作基础.ppt(34页珍藏版)》请在金锄头文库上搜索。
1、关系数据库操作基础关系数据库操作基础关系数据库操作基础关系数据库操作基础4.5 视图本人所售课程学生本人所售课程学生名单名单学生数据库用户1:教师用户2:学生用户3:教务员用户4:领导本学期为自己的课程安本学期为自己的课程安排排教师开课的情况,教教师开课的情况,教室使用的情况室使用的情况学生的平均成绩,最学生的平均成绩,最高成绩,最低成绩高成绩,最低成绩等等理解视图视图的特点视图的特点虚拟表虚拟表,是从一个或几个基本表(或视图)导出的表只存放视图的定义只存放视图的定义,不会出现数据冗余基表中的数据发生变化,从视图中查询出基表中的数据发生变化,从视图中查询出的数据也随之改变的数据也随之改变基于视
2、图的操作基于视图的操作基于视图的操作 查询查询 删除删除 受限更新受限更新定义基于该视图的新视图定义基于该视图的新视图创建视图DBMS执行CREATE VIEW语句语句时只是把视图的定义存入数据字典,并不执行其中的SELECT语句。在对视图查询时对视图查询时,按视图的定义从基本表中将数据查出。Create view AS 创建视图举例CREATE VIEW HBstudentASSELECT sno , sname , sex , ageFROM studentWHERE place LIKE 湖北例例1建立一个湖北考籍的学生信息视图建立一个湖北考籍的学生信息视图创建视图举例CREATE VI
3、EW C_stud_info(sno , sname , sex , place)ASSELECT sno , sname , sex , placeFROM studentWHERE sno IN(SELECT snoFROM studyWHERE cno IN(SELECT cnoFROM courseWHERE cname LIKE C语言)例例2建立一个学习了建立一个学习了C语言的所有学生信息语言的所有学生信息的视图的视图创建视图(续)WITH CHECK OPTION强制视图上执行的所有数据修改语句都必须符合由 设置的准则。通过视图修改行时,WITH CHECK OPTION 可确保
4、提交修改后,仍可通过视图看到修改的数据。创建视图举例CREATE VIEW HBstudent_1ASSELECT sno , sname , sex , age,placeFROM studentWHERE place LIKE 湖北WITH CHECK OPTION;例例1建立一个湖北考籍的学生信息视图建立一个湖北考籍的学生信息视图更新 WITH CHECK OPTION的视图举例update HBstudent_1set place=河北 where sno=1基于多个基表的视图CREATE VIEW Student_Study AS SELECT student.sno, cno, g
5、radeFROM student, studyWHERE student.sno = study.sno AND place LIKE %湖北%基于视图的视图例4 CREATE VIEW HBstudent_2 AS SELECT sno,sname,age FROM HBstudent WHERE sex=女带表达式的视图例例5CREATE VIEW HBstudent_3ASSELECT sno , sname , sex , year(getdate()-year, placeFROM studentWHERE place LIKE 湖北设置一些派生属性列设置一些派生属性列, 也也称为虚
6、拟列称为虚拟列距距今年份今年份带表达式的视图必须明确定义组成视图的各个属性列名带表达式的视图必须明确定义组成视图的各个属性列名删除视图DROP VIEW ;该语句从数据字典中删除指定的视图定义删除指定的视图定义由该视图导出的其他视图定义仍在数据字典中,但已不能使用,必须显式删除删除基表时,由该基表导出的所有视图定义都必须显式删除删除视图(续) 例例7 删除视图删除视图HBstudent_3 DROP VIEW HBstudent_3视图的查询SELECT .FROM 视图或者表视图或者表WHERE . 查询视图的工作原理从用户角度:查询视图与查询基本表相同从用户角度:查询视图与查询基本表相同D
7、BMS实现实现视图查询的方法视图查询的方法实体化视图(实体化视图(View Materialization)有效性检查:检查所查询的视图是否存在执行视图定义,将视图临时实体化,生成临时表查询视图转换为查询临时表查询完毕删除被实体化的视图(临时表)查询视图的工作原理(续)视图消解法(视图消解法(View Resolution)进行有效性检查,检查查询的表、视图等是否存在。如果存在,则从数据字典中取出视图的定义把视图定义中的子查询与用户的查询结合起来,转换成等价的对基本表的查询执行修正后的查询视图HBstudent中查找年龄大于20岁的学生基本信息SELECT sno , sname , sex
8、, ageFROM HBstudentWHERE age 20查询视图(续)用视图消解法解释查询的执行过程用视图消解法解释查询的执行过程转换后的查询语句为:SELECT sno , sname , sex , ageFROM HBstudentWHERE age 20查询视图(续)视图消解法的局限视图消解法的局限有些情况下,视图消解法不能生成正确查询。采用视图消解法的DBMS会限制这类查询。查询视图(续)已知视图:已知视图:CREATE VIEW avg_score(课程号课程号,平均平均分分) AS SELECT CourseNo,AVG(grade) FROM study GROUP BY
9、 CNo预对视图进行如下查询:select *from avg_score where平均分平均分=90如果采用视图消减法,则极有可能转化为下面的语句:SELECT CourseNo,AVG(grade)FROM studyWHERE AVG(grade)=90GROUP BY CNo而实际上,这是一条错误的转换。正确的转换应该是:SELECT CourseNo,AVG(grade)FROM studyGROUP BY CNoHAVING AVG(grade)=90更新视图用户角度用户角度:更新视图与更新基本表相同DBMS实现视图更新的方法视图实体化法(View Materialization
10、)视图消解法(View Resolution)指定WITH CHECK OPTION子句后,DBMS在更新视图时会进行检查,防止用户通过视图对不属于视图范围内的基本表数据进行更新更新视图通过视图添加数据insert into part_movie(title,year,length,incolor)values(M9,2005,102,1)在湖北考籍的学生视图HBstudent中插入一湖北考生信息,该学生信息为:(04031,戴敏,女,21)INSERT INTO HBstudentVALUES(04031,戴敏,女,21)该语句执行时将转换成对student表的插入:INSERT INTO
11、studentVALUES(04031,戴敏,女,21,湖北)更新视图修改数据将视图将视图HBstudent中学号为中学号为03061的同学年龄改为的同学年龄改为20岁。岁。UPDATE HBstudentSET age=20WHERE sno LIKE 03061该语句执行时将转换成对该语句执行时将转换成对student表的修改:表的修改:UPDATE studentSET age=20WHERE sno LIKE 03061 AND place LIKE 湖北湖北更新视图的限制一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新(对两类方法均如此)例:CRE
12、ATE VIEW avg_score(课程号课程号,平均分平均分) AS SELECT CNo,AVG(grade) FROM study GROUP BY CNo视图的可更新性SQL-Server规定可以按下列方式通过视图修改数据:视图在视图定义的 FROM 子句中包含至少一个表;视图不能只基于一视图不能只基于一个表达式个表达式。在选择列表中没有使用聚合函数没有使用聚合函数(AVG、COUNT、SUM、MIN、MAX、GROUPING、STDEV、STDEVP、VAR、VARP)或 GROUP BY、UNION、DISTINCT 或 TOP 子句。但是,可以在 FROM 子句定义的子查询范围
13、内使用聚合函数,前提条件是聚合函数生成的派生值没有修改过。在选择列表中不使用派生列不使用派生列。派生列是由除简单列引用以外的一切构成的结果集列。如果在视图中删除数据,在视图定义的 FROM 子句中只能列出一个表。1. 视图能够简化用户的操作当视图中数据不是直接来自基本表时,定义视图能够简化用户的操作基于多张表连接形成的视图基于复杂嵌套查询的视图含导出属性的视图2. 视图使用户能以多种角度看待同一数据视图机制能使不同用户以不同方式看待同一数据,适应数据库共享的需要3.视图对重构数据库提供了一定程度的逻辑独立性通过建立一个视图使用户的外模式保持不变程序员对数据库逻辑结构的修改不会影响到用户的视觉与操作.视图在一定程度上保证了数据的逻辑独立性4. 视图能够对机密数据提供安全保护对不同用户定义不同视图,使每个用户只能看到他有权看到的数据通过WITH CHECK OPTION对关键数据定义操作时限制