首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >视图机制

视图机制
EN

Stack Overflow用户
提问于 2018-07-11 08:09:35
回答 1查看 82关注 0票数 0

我知道View只是一个表的存储select查询。当我们调用视图时,select查询将在后端触发,并显示为视图的结果。

“我还知道我们可以从视图中更新/插入/删除数据,并且我们对视图所做的所有修改都将反映在基础表中。”

但这就是让我困惑的地方。

Q1:如果视图是一个简单的select查询,当它被调用时,它将后端执行select查询表单,更新/插入将如何在视图上工作。我不明白update/insert如何在"Select query“别名视图上工作?

Q2:我知道可以通过对底层表执行select来刷新视图。但是对视图所做的更改将如何影响底层表的数据呢?

当我们执行更新/删除/插入操作时,后端更新视图和底层表的机制是什么?

EN

回答 1

Stack Overflow用户

发布于 2018-07-11 11:57:52

首先,了解视图从不刷新(Oracle中的物化视图除外)。假设你已经创建了如下视图: create view myview as select * from t;

该视图查询将存储在数据库中。无论何时调用该视图,数据库都会加载存储的查询并执行,例如select * from myview

在上述情况下,数据库会将查询更改为like,并执行select * from (select * from t);

所以数据库总是从基表获取数据,而不是从视图(或刷新视图)获取数据。

对于您的第一个问题,请参见下面的更新myview set c1 = 123;在这种情况下,db会将此更新改为如下更新(select * from t) set c1 = 123;这在任何关系数据库管理系统中都是可行的。

对于您的第二个问题,使用视图的任何数据更改都只会影响基表数据,而不会更改/更新视图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51275487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档