zoukankan      html  css  js  c++  java
  • 视图

    一、视图的定义

      视图也称为虚表,视图本身不占用物理存储空间,视图存放于数据字典中,简单的来说视图可以看做是sql语句的集合。视图从数据库中的表产生,这些表称为视图的基表,一个视图可以从另一个视图中产生。

      视图看上去非常像数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些Oracle视图可以修改对应的基表,有些则不能(仅仅能查询)。

      对视图的查询没有限制,对视图的插入、删除、更新一般会有限制,所以为防止通过视图来修改基表的数据可以将视图创建为只读(带with read only)

    二、视图的作用

      1)提供各种数据表现形式,可以使用各种不同的方式将基表的数据展现在用户面前, 以便符合用户的使用习惯(主要手段: 使用别名);

      2)隐藏数据的逻辑复杂性并简化查询语句,多表查询语句一般是比较复杂的,而且用户需要了解表之间的关系,否则容易写错;如果基于这样的查询语句创建一个视图,用户就可以直接对这个视图进行"简单查询"而获得结果。这样就隐藏了数据的复杂性并简化了查询语句。这也是oracle提供各种"数据字典视图"的原因之一,all_constraints就是一个含有2个子查询并连接了9个表的视图(在catalog.sql中定义);

      3)执行某些必须使用视图的查询。某些查询必须借助视图的帮助才能完成。 比如,有些查询需要连接一个分组统计后的表和另一表,这时就可以先基于分组统计的结果创建一个视图,然后在查询中连接这个视图和另一个表就可以了;

      4)提供某些安全性保证。视图提供了一种可以控制的方式,即可以让不同的用户看见不同的列,而不允许访问那些敏感的列,这样就可以保证敏感数据不被用户看见;

      5)简化用户权限的管理。可以将视图的权限授予用户, 而不必将基表中某些列的权限授予用户, 这样就简化了用户权限的定义。

    三、视图创建

    创建单表视图

    create view vw_emp as 
    
    select empno,ename,job,hiredate,deptno from emp;
    
    select * from vw_emp where deptno=10;

    创建多表视图

    create view emp_dept as
    
    select e.empno,e.ename,d.deptno,d.dname from emp e join dept d on e.deptno=d.deptno

     

    对简单视图进行DML操作(增删改查):

    insert into vw_emp values(1,'a','aa',to_date('2018.5.1','yy.mm.dd'),10);
    
    update vw_emp set ename='cc' where ename='KING';
    
    delete vw_emp where ename='cc';
    
    select * from vw_emp where deptno=10

     

     

     

      

     

     

     

    基表也发生了相应的更改:

    select empno,ename,job,hiredate,deptno from emp where deptno=10;

     

     

     

     

    创建只读视图

    create or replace view vw_emp as 
    
    select empno,ename,job,hiredate,deptno
    
    from emp with read only; 

    删除视图:

      可以删除当前模式中的任何视图;
      如果要删除其他模式中的视图,必须拥有DROP ANY VIEW系统权限;
      视图被删除后,该视图的定义会从词典中被删除,并且在该视图上授予的“权限”也将被删除。视图被删除后,其他引用该视图的视图及存储过程等都会失效。

    drop view vw_test;

    四、查看视图

    使用数据字典视图:
      1、 dba_views——DBA视图描述数据库中的所有视图
      2、 all_views——ALL视图描述用户“可访问的”视图
      3、 user_views——USER视图描述“用户拥有的”视图 
      4、 dba_tab_columns——DBA视图描述数据库中的所有视图的列(或表的列)
      5、 all_tab_columns——ALL视图描述用户“可访问的”视图的列(或表的列)
      6 、user_tab_columns——USER视图描述“用户拥有的”视图的列(或表的列)

    视图的视图:

      在视图的基础上创建新的视图

      无源表视图:

      在没有源表时允许创建视图,不过要等到源表创建完成后才能使用

      Create force view 视图名 as select * from 表名

    内嵌视图的使用:

      内嵌视图不需要视图名称,只是一段SQL语句,可在增删改中使用

    select empno from( select * from emp where rownum<5 ) order by empno 

    数据库中表与视图的联系与区别?

    联系:

    视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。

    区别:

    1、视图是已经编译好的sql语句。而表不是
    2、视图没有实际的物理记录。而表有。
    3、表是内容,视图是窗口
    4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时四对它进行修改,但视图只能有创建的语句来修改
    5、表是内模式,视图是外模式
    6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
    7、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
    8、视图的建立和删除只影响视图本身,不影响对应的基本表。

      视图是数据库中特有的对象。视图用于存储查询,但不会存储数据(物化视图除外)。这是视图和数据表的重要区别。可以利用视图进行查询、插入、更新和删除数据。

    Oracle中有4 中视图:

    1. 关系视图

    2. 内嵌视图

    3. 对象视图

    4. 物化视图

    由于关系视图并不存储真实的数据, 因此占用数据库资源也较少。

    1、什么时候使用视图呢?

    应用场景1:保密工作,比如有一个员工工资表,如果你只希望财务看到员工工资这个字段,而其他人不能看到工资字段,那就用一个视图,把工资这个敏感字段过滤掉。

    应用场景2:有一个查询语句非常复杂,大概有100行这么多,有时还想把这个巨大无比的select语句和其他表关联起来得到结果,写太多很麻烦,可以用一个视图来代替这100行的select语句,充当一个变量角色。

    2、什么时候用临时表呢?

    应用场景1:你在短期内有很多DML操作,比如京东淘宝亚马逊的购物车表,把东西放购物车(insert),变更数量(update),删除商品(delete),一旦结算金钱后,这些数据就要清掉,这时需要用临时表。

    应用场景2:在导出数据时,你可能不想导完整的数据库,或者表,你可能只想要导出符合某些条件的数据,那么你可以创建临时表,把select语句插入到临时表,接着导出这个临时表,导完以后通过结束session或者事务的方式,让这些没用的数据自动清理掉。

    应用场景3:你在写存储过程时,有很多的连接,比如你需要连接A,B,C,D,E,F,G,H那么多张表,才能得到你的结果表,同时做连接的消耗太大,你可以先A,B,C连接的结果,放在临时表,接着再把这张临时表,跟D,E,F连接,作为新的结果放在临时表,接着再把临时表与G,H连接,最后得到临时表数据,一次插入到结果表(永久表)。

    视图的作用:

    第一点:使用视图,可以定制用户数据,聚焦特定的数据。

    解释: 在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话, 采购人员,可以需要一些与其有关的数据,而与他无关的数据,对他没 有任何意义,我们可以根据这一实际情况,专门为采购人员创建一个视 图,以后他在查询数据时,只需select * from view_caigou 就 可以啦。

    第二点:使用视图,可以简化数据操作。

    解释:我们在使用查询时,在很多时候我们要使用聚合函数,同时还要 显示其它字段的信息,可能还会需要关联到其它表,这时写的语句可能 会很长,如果这个动作频繁发生的话,我们可以创建视图,这以后,我 们只需要select * from view1就可以啦~,是不是很方便呀~

    第三点:使用视图,基表中的数据就有了一定的安全性

    解释: 因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以 将基表中重要的字段信息,可以不通过视图给用户,视图是动态的数据的集 合,数据是随着基表的更新而更新。同时,用户对视图,不可以随意的更改 和删除,可以保证数据的安全性。 第四点:可以合并分离的数据,创建分区视图(//目前我没用到) 解释: 随着社会的发展,公司的业务量的不断的扩大,一个大公司,下属都设有很 多的分公司,为了管理方便,我们需要统一表的结构,定期查看各公司业务 情况,而分别看各个公司的数据很不方便,没有很好的可比性,如果将这些 数据合并为一个表格里,就方便多啦,这时我们就可以使用union关键字, 将各分公司的数据合并为一个视图。

  • 相关阅读:
    ActiveSync合作关系对话框的配置
    WINCE对象存储区(object store)
    Wince 隐藏TASKBAR的方法
    Wince输入法换肤换语言机制
    poj 3080 Blue Jeans 解题报告
    codeforces A. Vasily the Bear and Triangle 解题报告
    hdu 1050 Moving Tables 解题报告
    hdu 1113 Word Amalgamation 解题报告
    codeforces A. IQ Test 解题报告
    poj 1007 DNA Sorting 解题报告
  • 原文地址:https://www.cnblogs.com/chen8023miss/p/11229692.html
Copyright © 2011-2022 走看看