对视图进行数据更新问题的学习

一、原理
对视图查询实际上是对表的查询,通过将视图实体化来实现

     实体化视图(View Materialization)步骤:

n  有效性检查:检查所查询的视图是否存在

n  执行视图定义,将视图临时实体化,生成临时表

n  查询视图转换为查询临时表

n  查询完毕删除被实体化的视图(临时表)

 
视图是可以进行insert、update、delete操作(统称为更新)的,对视图进行更新操作,DBMS会通过视图消解法转换为对表的更新操作。

u  视图消解法View Resolution执行步骤:

u  有效性检查,检查查询的表、视图等是否存在。如果存在,则从数据字典中取出视图的定义。

u  把视图定义中的子查询与用户的查询结合起来,转换成等价的对基本表的查询。

n  执行修正后的查询。

n  视图消解法的局限:有些情况下,视图消解法不能生成正确查询。采用视图消解法的DBMS会限制这类查询。

二、小结
有些视图可以通过视图消解法完成更新操作,有些则不可以,下面的示例演示了定义视图时增加“With Check Option”后导致的区别,先总结一下:
    增加With Check Option选项会导致在更新语句的基础上增加视图中的where条件,所以导致的更新失败较多。
 
三、示例
例1:通过视图插入数据(成功的)
1)视图定义
2)通过视图更新Categories表
3)通过视图更新Products表
注意:视图定义中where语句指定了CategoryID为1,但是向Categories表和Products表添加数据时均不会受此查询条件的影响。
 
例2:通过视图插入数据(失败的,由于设置了WITH CHECK OPTION
1)视图定义
2)通过视图更新Categories表(失败)
3)通过视图更新Products表
a)失败的
b)成功的




posted on 2012-06-29 13:38  onlyfew  阅读(769)  评论(0编辑  收藏  举报

导航