我在谷歌上搜索了上面的问题,得到了以下答案
YES-->如果是在简单视图(只包含一个基表)的情况下。
否---->如果是复杂视图(由多个基表和联接组成)。
但是,有一种间接的方法可以在复杂视图上执行DML操作,方法是使用"替代触发器"。在"代替触发器"的正文中,我们将使用共关系标识符和DML语句对复杂视图间接执行DML操作。然后,这些更改将反映在该特定复杂视图的基表中。
我的问题是,应用于视图的更改是否会对原始表产生任何影响?
如果操作单个基表上的视图,更改是否会反映在基表上?
有人能给我举一下上述情况的例子吗?
在Oracle中,您可以在以下条件下更新视图:
来自:Oracle数据库SQL参考
关于可更新视图的说明
可更新视图可用于插入、更新或删除
基表行。您可以创建一个固有可更新的视图,或者您可以在任何视图上创建INSTEAD OF触发器,使其
可更新。要了解是否可以以及以何种方式修改固有
可更新视图的列,请查询USER_updatable_columns数据字典视图。此视图显示的信息很有意义仅适用于固有的可更新视图。要使视图固有地
可更新,必须满足以下条件:
- 视图中的每一列都必须映射到单个表的一列。例如,如果视图列映射到TABLE子句的输出(
未测试的集合),则该视图本身不可更新视图不得包含以下任何构造:
集合运算符
DISTINCT操作员
聚合或分析函数
GROUP BY、ORDER BY、MODEL、CONNECT BY或START WITH子句
SELECT列表中的集合表达式
SELECT列表中的子查询
指定为WITH READ ONLY的子查询
如Oracle数据库中所述的连接,但有一些例外管理员指南
此外,如果固有的可更新视图包含伪列或表达式,则不能使用update更新基表行语句,引用这些伪列或表达式中的任何一个。
如果您希望联接视图是可更新的,那么以下所有条件都必须为真:
DML语句只能影响联接的一个表
对于INSERT语句,视图不能创建为WITH CHECKOPTION,并且插入值的所有列必须来自保留关键字的表。保留关键字的表基表中的主键或唯一键值在中也是唯一的join视图
对于UPDATE语句,所有更新的列都必须从保留关键字的表。如果视图是用CHECK OPTION创建的,则联接列和取自引用较多的表的列视图中的一次以上必须屏蔽UPDATE
对于DELETE语句,如果联接导致多个保留键的表,则无论视图是否是用WITH CHECK OPTION创建的,Oracle Database都会从from子句中命名的第一个
表中删除。
在SQL Server中,您可以在视图中插入、更新和删除行,但受以下限制,源
如果视图包含多个表之间的联接,则只能在视图中插入和更新一个表,并且不能删除行。
不能基于联合查询直接修改视图中的数据。不能修改使用GROUP BY或DISTINCT语句的视图中的数据。
所有被修改的列都受到相同的限制,就好像直接对基执行语句一样桌子
无法通过视图修改文本和图像列。
没有检查视图条件。例如,如果视图选择了居住在巴黎的所有客户,并且数据被修改为
添加或编辑不具有City='Paris'的行,则数据
将在基表中进行修改,但不会显示在视图中,除非在定义视图时使用
WITH CHECK OPTION。