oracle 视图的本质

视图是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约束,或者有默认值)


可见一个概念,我们不知道要知道是什么,还要知道为什么。就是多问问问题的本质。通过推理加深对概念的印象。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值