我知道View只是表的存储选择查询。每当我们调用视图时,该选择查询都会在后端触发,以作为视图结果显示。
“我还知道我们可以从VIEW更新/插入/删除数据,而我们为视图所做的所有修改将反映在基础表中”
但这就是让我困惑的地方。
Q1:如果视图是简单的选择查询,并且一旦调用它,它将在后端执行选择查询表单,更新/插入如何在视图上工作。我不了解更新/插入如何在“选择查询”别名VIEW上工作?
Q2:我知道可以通过在基础表上执行select来刷新视图。但是对视图所做的更改将如何影响基础表的数据?
当我们执行update / delete / insert时,后端会采用什么机制来更新视图和基础表?
答案 0 :(得分:1)
首先,理解视图永远不会刷新(Oracle中的物化视图除外)。 假设您已创建如下视图 创建视图myview作为选择*从t;
该视图查询将存储在数据库中。每当您调用该视图时,数据库都会加载该存储的查询并执行例如 从我的视图中选择*
在上述情况下,数据库将把查询更改为如下所示并执行 选择* from(从t中选择*);
因此数据库总是从基表中获取数据,而不是从视图(或刷新视图)中获取数据。
第一个问题,请参见下面的示例 更新myview集c1 = 123; 在这种情况下,db会将此更新更改为如下所示 更新(从*中选择*)设置c1 = 123; 在任何rdbms中都是可行的。
对于第二个问题,使用视图进行的任何数据更改只会影响基表数据,而不会更改/更新视图。