SQL视图更新与数据字典详解
1. 视图更新概述
更新视图实际上就是更新其底层的表,但在某些情况下,通过视图进行更改是不可能的。以下是几种常见的情况:
- 缺少必填列 :如果视图基于单个表构建,且排除了没有默认值的必填列,则无法仅通过该视图插入行。例如, people
表的视图排除了必填的 born
列,就不能向该视图插入行并期望在 people
表中检索到。
- 包含聚合函数 :包含聚合函数的视图,如返回每个国家电影数量的视图,很难有意义地更改底层数据。直接通过该视图插入新国家和电影数量,或更新聚合值都是不可能的,因为聚合会丢失信息,而更改表需要更详细的信息。
- 包含计算列或函数调用结果 :如果视图包含计算列或函数调用的结果,可能无法从视图显示的内容重建原始数据。例如, people
表的视图使用 full_name()
函数将名字和姓氏显示为单列,无法确定如何将 Tommy Lee Jones
插入该列。
即使视图相对完整地呈现了原始列,更新问题也不简单。例如,有如下视图:
create view vmovies
as select m.movieid,
m.title,
m.year_released,
c.country_name