Sql server 为什么我们可以在sql server中编辑视图
在sql server中,我们可以更新数据视图。我认为视图的概念是一个只读表。Sql server 为什么我们可以在sql server中编辑视图,sql-server,oracle,Sql Server,Oracle,在sql server中,我们可以更新数据视图。我认为视图的概念是一个只读表。 为什么我们可以在sql中编辑视图。oracle中有可能吗?因为视图是只读表,并且它的不支持DML语句,所以不能在视图上执行更新 一个有趣的因素是,您可以在视图上编写updatestatemennt,并为此编写而不是触发器,因此您可以对视图中的表执行多个update语句 根据有以下限制的观点 按命令不起作用 通过连接表外部视图来添加列的成本很高 在视图上创建的索引不经常使用 选择*并在视图中添加列问题 不允许计数(*
为什么我们可以在sql中编辑视图。oracle中有可能吗?因为视图是
只读表
,并且它的不支持DML语句
,所以不能在视图上执行更新
一个有趣的因素是,您可以在视图上编写updatestatemennt
,并为此编写而不是触发器
,因此您可以对视图中的表执行多个update语句
根据有以下限制的观点
- 按命令不起作用
- 通过连接表外部视图来添加列的成本很高
- 在视图上创建的索引不经常使用
- 选择*并在视图中添加列问题
- 不允许计数(*),但允许计数大(*)
- 索引视图中不允许联合,但允许或
- 索引视图中不允许跨数据库查询
- 索引视图中不允许外部联接
- 索引视图中不允许自联接
- 关键字视图定义不能包含索引视图的关键字
- 无法使用索引视图查看视图
然而,在实践中,这一理想并没有实现。除了@JamieA所写的之外,视图不仅可以限制对字段的访问,还可以限制对表中数据的访问。
看看simple并用它进行实验。
示例中的视图仅限制对表的列id、val1的访问,还限制对行的访问(仅id=2..10)。您只能在视图中更新和删除行2..10
但是,该视图不阻止插入id为20的行
这是一个带有复选选项的视图。在这种情况下,视图不仅阻止删除和更新,而且还阻止插入与视图的where子句不匹配的行。
@yogi写道,如果视图连接两个表,我们就不能更新视图->下面是一个示例,它显示了连接两个表的简单视图,以及该视图的更新工作方式。
这些简单的例子是针对Oracle的,但是经过一些小的修改后,MS-SQL也可以使用(必须在创建表中更改数据类型),因为当我查看MSDN文档(部分:可更新视图->)时,我没有发现MS SQL和Oracle之间有任何显著的差异,视图在两个数据库上的工作方式似乎相似 是的,这在Oracle中是可能的,其他答案已经解释了为什么视图是可更新的,并且对这个问题有了一些解释,Oracle中也允许视图,但有一些限制/限制
与此类似,视图select不能有:聚合函数、distinct子句、group by。。。阅读链接了解更多信息您对“更新视图”的确切含义是什么?对视图运行
UPDATE
语句?是的,在Oracle(以及许多其他现代DBMS)中也可以更新数据。为什么我们可以更新视图?您不需要视图上的“代替”触发器来执行更新逻辑吗?我认为我们可以更新视图的数据,直到它属于一个表为止,如果视图由使用joins@yogi,不完全是(,请参见可更新视图部分),但确实存在一些限制。这是关于索引视图的。此外,皮纳尔·戴夫不是网络上最好的信息来源。他只是从官方文档中重复信息。视图不是“只读表”,在许多情况下(如果视图满足一些基本条件,甚至在连接两个或多个表时),您可以在视图下修改表,而无需instead of触发器,有关详细信息,请参阅文档中的“可更新视图”部分: