更新视图的限制

视图是由一个或多个基本表(或视图)导出的表,它可以是连接多张表的虚表,也可以是通过where子句限制返回行列之后的查询结果。在使用敏感数据的企业中,视图几乎是唯一可以用来面对普通用户的数据库对象。

利用数据库视图进行更新实质上就是对数据库的基本表进行更新。所以视图的更新update命令有很多限制。

1,如果更新视图的字段来自字段表达式或者是常数,则不允许对视图进行Insert、update操作(但可以进行delete操作)。因为,假设用字段表达式或者是常数对视图进行了更新,那么视图的相关行或列就与基本表中的相关行或列不一致,或者在基本表中根本找不到,对视图的更新实质上是对基本表的更新,因此和基本表的不一致的视图是毫无意义的。(不允许Insert操作也是同样的道理)

​2,如果更新字段来自库函数,则不允许对视图进行Insert、update操作(但可以进行delete操作)。举个例,如果当前视图只是某个基本表中的一部分,而现在要用sum函数对视图进行更新,那么sum就会将基本表中满足条件的值都相加,而其实视图中只包含满足条件的一部分,这样就会出现错误。

3,更新字段包含group by,distinct等函数,这跟2的解释是一样的。

4,​若视图来自两个及以上的基本表,则不允许更新。这是因为如果要更新这样的视图,那么就会涉及到多个基本表的同时修改,这会导致数据库的存取非常复杂,因此,在现有的关系数据库系统中,只支持来自单个表的视图的更新。

5,在一个不允许更新的视图上定义的视图​不允许更新。

【摘取自:利用视图更新数据库的探讨。郭小燕,张明】​

摘自:

http://www.doc88.com/p-2886746916477.html

http://blog.sina.com.cn/s/blog_e1a6a43f0102vkdk.htm

你可能感兴趣的:(更新视图的限制)