插入(或更新)到基表后视图是不是立即更新

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

以上是关于插入(或更新)到基表后视图是不是立即更新的主要内容,如果未能解决你的问题,请参考以下文章

仅在 1 个基表中更新数据库联接视图

物化视图快速刷新 - 更新基表时插入和删除

ORACLE 中视图更新可以更新基表中数据,视图更新应该满足啥条件?

视图或函数[视图名称]不可更新,因为修改会影响多个基表 - 在POST到任何和每个控制器

视图基表中的 SQL 更新行

在 MySQL 中更新视图