0

我正在尝试自学 SQL 并陷入困境。

我正在使用 Oracle 提供的标准演示表(参见此处)。

假设我创建了两个相同的视图:

create view view_a_emp as
select empno, ename, job
from emp
where job = 'CLERK';

create view view_b_emp as
select empno, ename, job
from emp
where job = 'CLERK';

我将为每个返回 4 行。

如果我更新 view_b_emp,像这样:

update view_b_emp
set job = 'ASSISTANT';

现在两个视图都没有返回任何行,并且基础基表已被修改(所有“文员”现在都是“助理”)。

很明显,我误解了视图的工作原理,但我认为视图的想法是提供一个虚拟表。

谁能解释为什么在一个视图上更新和设置属性会改变基础表?

4

2 回答 2

1

这就是它的工作原理!视图只不过是一个存储的查询。

如果您希望防止对视图的更新与视图的定义发生冲突,您可以添加with check option到视图中。

请参阅http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_8004.htm#SQLRF54792

于 2013-03-27T13:37:29.990 回答
0

因为它链接到基础表,所以修改表视图将修改其基础表。 http://www.informit.com/articles/article.aspx?p=130855&seqNum=4

于 2013-03-27T13:37:45.763 回答