意见机制

时间:2018-07-11 00:09:35

标签: sql-server database postgresql db2 views

我知道View只是表的存储选择查询。每当我们调用视图时,该选择查询都会在后端触发,以作为视图结果显示。

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

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

Q1:如果视图是简单的选择查询,并且一旦调用它,它将在后端执行选择查询表单,更新/插入如何在视图上工作。我不了解更新/插入如何在“选择查询”别名VIEW上工作?

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

当我们执行update / delete / insert时,后端会采用什么机制来更新视图和基础表?

table_name: cyberarc, View_name: v_cyberarc

1 个答案:

答案 0 :(得分:1)

首先,理解视图永远不会刷新(Oracle中的物化视图除外)。 假设您已创建如下视图 创建视图myview作为选择*从t;

该视图查询将存储在数据库中。每当您调用该视图时,数据库都会加载该存储的查询并执行例如 从我的视图中选择*

在上述情况下,

数据库将把查询更改为如下所示并执行 选择* from(从t中选择*);

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

第一个问题,请参见下面的示例 更新myview集c1 = 123; 在这种情况下,db会将此更新更改为如下所示 更新(从*中选择*)设置c1 = 123; 在任何rdbms中都是可行的。

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