我正在尝试自学SQL并且已经陷入困境。
我正在使用Oracle提供的标准演示表(seen here)。
说我是否创建了两个相同的视图:
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';
现在两个视图都没有返回任何行,并且底层基表已被修改(所有“文员”现在都是“助手”)。
很明显,我误解了视图是如何工作的,但我认为视图的想法是提供一个虚拟表。
有人能否解释为什么在一个视图上更新和设置属性会更改基础表?
答案 0 :(得分:1)
这是它的工作原理!视图只不过是存储的查询。
如果您希望阻止视图更新与视图的定义冲突,可以将with check option
添加到视图中。
请参阅http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_8004.htm#SQLRF54792
答案 1 :(得分:0)
因为它链接到基础表,修改表视图将修改其基础表。 http://www.informit.com/articles/article.aspx?p=130855&seqNum=4