所有的视图都可以更新吗?为什么?

所有的视图都可以更新吗?为什么?,第1张

视图的更新

•对视图进行insert update delete将会影响其基表,因为视图中不包含任何数据

•不是所有视图都可以更新(可能引起数据紊乱或者数据无意义)

•含有分组(group by 和 having)

•联接查询

•子查询

•聚合函数

• DISTINCT

•不是迫不得已,不要对视图进行更新 *** 作,因为效率低。视图主要用于查询

只有特定的视图才能被更新,而且更新视图有一些限制条件

但是通过视图去更新则必须注意以下条件:

1、如果视图有一个基本关系的简单查询生成,而且它还包含了基本关系中的主关键字或是候选关键字,则可以通过这个视图进行更新 *** 作。

2、不允许对涉及到多个基本关系的视图进行更新。

3、如果视图的生成中涉及到聚集或是分组 *** 作,则不允许通过这个视图进行更新。

ISO标准给出的视图的可更新充要条件为:

1、没有指定DISTINCT,即重复元组未从查询结果中消除;

2、定义查询的SELECT列表中的每个元素均为列名(而不是常量,表达式或聚合函数),且列名出现不能多于一次;

3、FROM子句只能指定一个表,即视图必须有一个源表且用户有请求该表的权限。如果源表本身就是一个视图,那么视图必须满足这些条件。因此,排除了基于连接、并(UNION)、交(INTERSECT)或差(EXCEPT) *** 作的所有视图;

4、where子句不能包含任何引用了FROM子句的表的嵌套SELECT *** 作。

5、定义查询不能有GROUP BY或HAVING子句。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9867873.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存