插入(或更新)到基表后视图是不是立即更新
Posted
技术标签:
【中文标题】插入(或更新)到基表后视图是不是立即更新【英文标题】:Is Views update after an Insert(or update) into base tables Immediately插入(或更新)到基表后视图是否立即更新 【发布时间】:2011-12-10 09:55:06 【问题描述】:我有一个关于视图的问题。考虑我们有一个视图,我在它的基表中插入一条记录。插入后我的视图是否会更新,或者我应该执行SELECT
来更新?
我认为我的问题很明显 - 只是查看 SELECT
或者它的结果保存在数据库中,如果它是基表,那么当它更新时它就会变成更新?
【问题讨论】:
【参考方案1】:普通视图不会被持久化。如果插入了可更新视图,则从视图(或受影响的基础表)中进行选择将显示您的结果。
不完全确定您要解决什么问题。视图(非索引)足以满足大多数应用程序。
查看索引视图:Improving Performance with SQL Server 2008 Indexed Views:
在非索引视图的情况下,视图的必要部分 解决查询是在运行时实现的。任何计算,如 因为连接或聚合是在每个查询执行期间完成的 查询引用视图。 在唯一聚集索引被 在视图上创建,视图的结果集立即物化 并持久化在数据库中的物理存储中,节省开销 在执行时执行这种昂贵的操作。
索引视图的典型用途是当您需要执行昂贵的聚合时。
【讨论】:
您说的是普通视图。我们还有其他视图类型吗?我希望我的数据持久化,并且在我的基表中的每个insert
之后,我的视图都会更新
是的,另一种称为索引视图
索引视图是否保留数据?
@BrandonMoore:视图上的聚集索引是该视图的数据,这就是持久化的内容(聚集索引及其所有页面 --> 所有数据页面)
@BrandonMoore: 聚集索引 IS 数据 - 所以如果聚集索引被持久化,实际上视图的整个 data 是坚持【参考方案2】:
将视图视为一个选择语句。不必写出整个 select 语句,您只需选择视图,它就会为您运行该 select 语句。所以是的,你对基础表所做的任何事情都将自动在视图中可见。
【讨论】:
简单明了的答案+1以上是关于插入(或更新)到基表后视图是不是立即更新的主要内容,如果未能解决你的问题,请参考以下文章
ORACLE 中视图更新可以更新基表中数据,视图更新应该满足啥条件?