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约束,或者有默认值)
可见一个概念,我们不知道要知道是什么,还要知道为什么。就是多问问问题的本质。通过推理加深对概念的印象。
以下是我对视图的认识,比较浅薄,但是是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约束,或者有默认值)
可见一个概念,我们不知道要知道是什么,还要知道为什么。就是多问问问题的本质。通过推理加深对概念的印象。
相关文章推荐
- oracle中获取视图引用的表
- Oracle的数据字典视图
- Oracle的视图、同义词、序列
- Oracle的实体化视图(MVIEW)的深入研究之一
- 在Oracle中向视图中插入数据的方法
- Oracle的实体化视图(MVIEW)的深入研究之二
- oracle最重要的9个动态性能视图
- ORACLE主要的系统表和数据字典视图
- Oracle如何实现利用实体化视图提高查询性能
- Oracle: 删除当前用户的所有对象(表、视图、触发器、存储过程、函数)
- 在ORACLE中备份和恢复使用的动态视图和字典视图
- ORACLE中表,视图名变大写和BLOB操作的问题
- Oracle 无法删除表或视图错误,错误代码:ORA-00942
- Oracle 无法删除表或视图错误,错误代码:ORA-00942
- oracle 系统视图重建
- Oracle的v$动态视图
- IFS or Crystal Report里的Oracle视图脚本文件写法注意
- Oracle动态性能视图 v$sga 学习笔记
- Oracle的实体化视图(MVIEW)的深入研究之四
- oracle多表视图更新