视图的依赖性
来源:互联网 发布:c语言视频教程哪个好 编辑:程序博客网 时间:2024/05/01 13:44
视图是一个基于其他对象的查询语句,这里的其他对象包括表,视图,实体化视图.通过视图可以得到以下好处:
1,提供表级别的安全性
2,隐藏数据的复杂性
3,提供简单的语句给用户
4,提供比基表更高的灵活性
5,保存复杂的查询
视图和构建视图的表或其他对象存在很强依赖关系,基表的改变会对视图产生很大的影响.这里以基于表的视图为例,说明一下视图的依赖性.
二视图的建立
三视图相关数据字典视图介绍
例子2:重新添加视图的基表,并且保证新添加的基表与原基表一致
例子3:重新添加视图的基表,并且保证新添加的基表与原基表不一致(视图查询的相关字段一致)
例子3:重新添加视图的基表,并且保证新添加的基表与原基表不一致(视图查询的相关字段不一致)
从上面的例子可以看出,基表的改变会在很大程度上对此基表上的视图产生影响.所以在修改基表的时候一定要仔细检查一下此基表上的视图,消除产生错误的可能.
1,提供表级别的安全性
2,隐藏数据的复杂性
3,提供简单的语句给用户
4,提供比基表更高的灵活性
5,保存复杂的查询
视图和构建视图的表或其他对象存在很强依赖关系,基表的改变会对视图产生很大的影响.这里以基于表的视图为例,说明一下视图的依赖性.
前提准备
一基表的建立
SQL> drop table test01;Table droppedSQL> create table test01 2 (id varchar2(3));Table created
二视图的建立
SQL> drop view view_test01;View droppedSQL> create view view_test01 as select * from test01;View created
三视图相关数据字典视图介绍
SQL> select view_name,text_length,text from user_views;VIEW_NAME TEXT_LENGTH TEXTVIEW_TEST01 25 select "ID" from test01从这个结果可以看出:虽然建立视图时候用的语句是select * from test01,可是在数据库中存储的视图的定义为select "ID" from test01.这说明在数据库保存视图的时候会查询相关的数据字典把*翻译成相应的字段,这样操作有好的方面也有不好的方面.好的方面是可以提高视图查询时候的性能,不好的地方是在对表进行修改后可能会引起麻烦.SQL> select object_name,OBJECT_TYPE,STATUS from user_objects where OBJECT_NAME='VIEW_TEST01';OBJECT_NAME OBJECT_TYPE STATUS-------------------------------------------------------------------------------- ------------------ -------VIEW_TEST01 VIEW VALID从这个结果可以看到视图VIEW_TEST01的有效性.其中的VALID代表该视图此时是有效的,相应的INVALID代表该视图为失效的.
下面通过一系列测试来说明视图的依赖性
例子1:删除视图的基表
SQL> drop table test01;Table droppedSQL> select object_name,OBJECT_TYPE,STATUS from user_objects where OBJECT_NAME='VIEW_TEST01';OBJECT_NAME OBJECT_TYPE STATUS-------------------------------------------------------------------------------- ------------------ -------VIEW_TEST01 VIEW INVALIDSQL> select * from VIEW_TEST01;select * from VIEW_TEST01ORA-04063: view "SUNWG.VIEW_TEST01" 有错误当把视图VIEW_TEST01的基表test01删除后,在查询该视图的有效性,会发现此时该视图已经为失效的.对该视图进行查询会得到一个ora的错误.
例子2:重新添加视图的基表,并且保证新添加的基表与原基表一致
SQL> create table test01 2 (id varchar2(3));Table createdSQL> select object_name,OBJECT_TYPE,STATUS from user_objects where OBJECT_NAME='VIEW_TEST01';OBJECT_NAME OBJECT_TYPE STATUS-------------------------------------------------------------------------------- ------------------ -------VIEW_TEST01 VIEW INVALIDSQL> select * from VIEW_TEST01;IDSQL> select object_name,OBJECT_TYPE,STATUS from user_objects where OBJECT_NAME='VIEW_TEST01';OBJECT_NAME OBJECT_TYPE STATUS-------------------------------------------------------------------------------- ------------------ -------VIEW_TEST01 VIEW VALID此时发现当重新创建原基表的时候,该视图的有效性仍然为失效的.可是当执行的关于这个视图的查询的时候可以发现可以正常的进行,不会引发任何错误.再次查询该视图状态的时候发现该视图已经变为有效.说明在查询视图的时候,数据库会先进行一个对视图的重新编译,用来检验视图的有效性.
例子3:重新添加视图的基表,并且保证新添加的基表与原基表不一致(视图查询的相关字段一致)
SQL> drop table test01;Table droppedSQL> create table test01 2 (id varchar2(3), 3 name varchar2(10));Table createdSQL> select * from VIEW_TEST01;ID---可以发现此时仅可以查询到id这个字段,而新添加的字段name却不能查到.这个就是由于前面提交的数据库保存视图的机制决定的.视图在数据库中保存为一条查询语句,仅仅为’select id from test01’,所以即使对表添加了字段也不会在先前建立的视图中得到体现.
例子3:重新添加视图的基表,并且保证新添加的基表与原基表不一致(视图查询的相关字段不一致)
SQL> drop table test01;Table droppedSQL> create table test01 2 (id date);Table createdSQL> select * from VIEW_TEST01;ID-----------SQL> desc VIEW_TEST01;Name Type Nullable Default Comments ---- ---- -------- ------- -------- ID DATE Y此时发现虽然视图可以查询,但是查询的结果已经发生了变化,原来查询的id为varhchar的,而现在为date的.这也是由于前面提到的数据库保存视图的机制决定的.
从上面的例子可以看出,基表的改变会在很大程度上对此基表上的视图产生影响.所以在修改基表的时候一定要仔细检查一下此基表上的视图,消除产生错误的可能.
0 0
- 视图的依赖性
- Linux硬件的依赖性
- linux硬件的依赖性
- 文件间的编译依赖性
- 犹豫不决的人依赖性强
- 软件包的依赖性关系定义
- ubuntu的软件包依赖性错误的解决方法
- spring bean定义的依赖性检查
- 怎样降低文档之间的依赖性
- 怎样降低文档之间的依赖性
- 依赖性强的人压力大
- 类模板友元声明的依赖性
- 降低文件之间的编译依赖性
- linux硬件的依赖性及目录结构
- 改变中学生学习语文的依赖性
- 一个关于消除数据依赖性的问题
- Spring的核心技术(四)---依赖性简介
- c++将文件间的编译依赖性降至最低
- Struts 拦截器权限控制【通过拦截器实现登录后跳转到登录前页面】
- Java 服务器非阻塞模式下的例子
- 查询处理和执行----查询优化(1)
- [NOIP 2009]靶形数独
- 怎样成为全栈工程师(Full Stack Developer)?
- 视图的依赖性
- MVC实用架构设计(〇)——总体设计
- 给Linux系统/网络管理员准备的Nmap命令的29个实用范例
- VC++ 类视图管理器载入失败的解决办法
- suspicious characters loitering about 'scp -t ~'
- Understanding TCP/IP Network Stack & Writing Network Apps
- Go学习笔记——类型与接口
- 软件设计的初衷和应对
- shell编程笔记-基本文本处理