第三章 关系数据库标准语言SQL

第一节 第二节 第三节 第四节

第四节 视 图    (1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)
    视图消解法的局限,有些情况下,视图消解法不能生成正确查询。采用视图消解法的DBMS会限制这类查
询。
3.5.3 更新视图
    用户角度:更新视图与更新基本表相同,DBMS实现视图更新的方法:
    视图实体化法(View Materialization);
    视图消解法(View Resolution)。
    指定WITH CHECK OPTION子句后,DBMS在更新视图时会进行检查,防止用户通过视图对不属于视图范围
内的基本表数据进行更新。
    例 将信息系学生视图IS_Student中学号95002的学生姓名改为“刘辰”。
        UPDATE IS_Student
        SET Sname= '刘辰'
        WHERE Sno= '95002';
    转换后的语句:
        UPDATE Student
        SET Sname= '刘辰'
        WHERE Sno= '95002' 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的更新,实际系统对视图更新的限制,允许对行
列子集视图进行更新。对其他类型视图的更新不同系统有不同限制。
    DB2对视图更新的限制:
    (1) 若视图是由两个以上基本表导出的,则此视图不允许更新。
    (2) 若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATE操作,但允许执行
DELETE操作。
    (3) 若视图的字段来自集函数,则此视图不允许更新。
    (4) 若视图定义中含有GROUP BY子句,则此视图不允许更新。
    (5) 若视图定义中含有DISTINCT短语,则此视图不允许更新。
    (6) 若视图定义中有嵌套查询,并且内层查询的FROM子句中涉及的表也是导出该视图的基本表,则此视
图不允许更新。
    (7) 一个不允许更新的视图上定义的视图也不允许更新

吉林大学网络教育学院 版权所有