[工学]chp33
3.5.3 更新视图 用户角度:更新视图与更新基本表相同 DBMS实现视图更新的方法 视图消解法(View Resolution) 指定WITH CHECK OPTION子句后 DBMS在更新视图时会进行检查,防止用户通过视图对不属于视图范围内的基本表数据进行更新 [例1] 将信息系学生视图IS_Student中学号95002 的学生姓名改为“刘辰”。 UPDATE IS_Student SET Sname= 刘辰 WHERE Sno= 95002; 转换后的语句: UPDATE Student SET Sname= 刘辰 WHERE Sno= 95002 AND Sdept= IS; 更新视图(续) [例2] 向信息系学生视图IS_S中插入一个新的学生记录:95029,赵新,20岁 INSERT INTO IS_Student VALUES(‘95029’,‘赵新’,20); 转换为对基本表的更新: INSERT INTO Student(Sno,Sname,Sage,Sdept) VALUES(95029,赵新,20,IS ); 更新视图(续) [例3] 删除视图CS_S中学号为95029的记录 DELETE FROM IS_Student WHERE Sno= 95029; 转换为对基本表的更新: DELETE FROM Student WHERE Sno= 95029 AND Sdept= IS; 更新视图的限制 一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新(对两类方法均如此) 例:视图S_G为不可更新视图。 CREATE VIEW S_G (Sno,Gavg) AS SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno; 更新视图(续) 对于如下更新语句: UPDATE S_G SET Gavg=90 WHERE Sno= 95001; 无法将其转换成对基本表SC的更新 3.5 视 图 3.5.1 定义视图 3.5.2 查询视图 3.5.3 更新视图 3.5.4 视图的作用 1. 视图能够简化用户的操作 当视图中数据不是直接来自基本表时,定义视图能够简化用户的操作 基于多张表连接形成的视图 基于复杂嵌套查询的视图 含导出属性的视图 2. 视图使用户能以多种角度看待同一数据 视图机制能使不同用户以不同方式看待同一数据,适应数据库共享的需要 3.视图对重构数据库提供了一定程度的逻辑独立性 例:数据库逻辑结构发生改变 学生关系Student (Sno,Sname,Ssex,Sage,Sdept) “垂直”地分成两个基本表: SX(Sno,Sname,Sage) SY(Sno,Ssex,Sdept) 通过建立一个视图Student: CREATE VIEW Student(Sno,Sname,Ssex,Sage,Sdept) AS SELECT SX.Sno,SX.Sname,SY.Ssex,SX.Sage,SY.Sdept FROM SX,SY WHERE SX.Sno=SY.Sno; 使用户的外模式保持不变,从而对原Student表的 查询程序不必修改 4. 视图能够对机密数据提供安全保护 对不同用户定义不同视图,使每个用户只能看到他有权看到的数据 通过WITH CHECK OPTION对关键数据定义操作时间限制 建立视图(续) [例3 ] 建立1号课程的选课视图,并要求透过该视图进行的更新操作只涉及1号课程,同时对该视图的任何操作只能在工作时间进行。 CREATE VIEW IS_SC AS SELECT Sno,Cno,Grade FROM SC WHERE Cno= 1 AND TO_CHAR(SYSDATE,HH24) BETWEEN 9 AND 17 AND TO_CHAR(SYSDATE,D) BETWEEN 2 AND 6 WITH CHECK OPTION; 1)查询全体学生信息,按年龄降序排列 2)查询选修课程名为Java的学生姓名(用IN谓词和连接查询分别实现) 3)查询成绩大于课号01中所有学生成绩的学生号//考虑选课的成绩为NULL的问题 4)查询所有超过5个学生选修的课程的学生数 5)统计选修了课程的学生人数 6)统计01课程的平均分 7)查询没有选修课程01的学生姓名和系 8)查询选修课
原创力文档

文档评论(0)