您的位置:首页 > 数据库 > Oracle

oracle 视图的本质

2017-01-11 09:48 169 查看
视图是Oracle系统中经常被用到的概念。也是关系型数据库中一个重要的概念。

以下是我对视图的认识,比较浅薄,但是是OCP考试的内容。算是抛砖引玉吧。

视图的本质是select 语句,理解上更像一个别名,没有数据,如果删除视图里的数据,表中数据就会被删除。 可以基于任何select 语句创建视图。

视图的简单分类如下:



1 简单视图 --- 不使用聚合、函数  ,一般能DML,但是有时候要注意约束。

2 复杂视图-- 使用 聚合或者函数,一般不能DML。

复杂视图举例

SQL> create or replace view v_emp as select deptno,count(*)  empcount  from emp group by deptno

  2  /

View created.

SQL> select * from v_emp

  2  /

    DEPTNO   EMPCOUNT

---------- ----------
30   6
20   5
10   3

SQL> delete from v_emp

  2  /

delete from v_emp
            *
ERROR at line 1:

ORA-01732: data manipulation operation not legal on this view

可是为什么 "复杂视图"  无法删除呢?

复杂视图更像是一个查询一个函数操作,在执行查询的时候才有意义。

本身在数据库中并不存储,所以既然不存在 你删除什么?可是为什么不能Insert,因为oracle database engine无法反转group by 函数的作用。

对于简单视图,删除的是标准的内容。但是也不能违背表本身的数据完整性,当你用视图插入数据的时候(表中其它列没有Not null约束,或者有默认值)

可见一个概念,我们不知道要知道是什么,还要知道为什么。就是多问问问题的本质。通过推理加深对概念的印象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: