zoukankan      html  css  js  c++  java
  • oracle视图

    视图和同义词

    一.视图:

    1.首先我们说说视图的作用:

    • 视图跟查询select的作用差不多,只不过视图具有封装的作用,跟java中的类的概念有相似之处。通过创建一个视图,你可以把一些简单的,复杂的查询的sql语句存贮于它里面,所以,视图是基于一张表或多张表的。
    • 视图实际并不存贮数据,创建视图后,每次通过视图查询,程序就会在后台自己执行视图中的select语句。数据是存贮在基表中的。(基表就是创建视图时用到的表)。user_table,user_sequences,user_indexes

       都是视图。

    • 好处:将复杂的查询用视图来实现,隐藏复杂的业务逻辑(很像java类中的函数)。

          可以隐藏表中的某些行,大公司用于隐藏一些关键信息很重要。

          可以禁止用户访问基表,只能通过视图来访问。

    2.创建视图前所需要的条件。

    • 学习几天数据库之后,你就会知道,不管对数据做什么操作,首先这个用户必须要有操作的权限。所以,创建视图需要视图的权限。

      查询用户的权限:

    select * from user_role_privs;
    

      看看它有没有创建视图的权限。

    • 授予用户创建视图的权限。
    grant create view to scott;
    

      给scott用户分配创建视图的权限。

    3.准备工作做好之后就可以创建视图了。

    • 创建视图的语法。  

      CREATE [OR REPLACE] [FORCE | NOFORCE ] VIEW view_name;

      [ALIAS_NAME,....(表达式)] AS SUBQUERY

      [WITH CHECK OPTION | READ ONLY]

      CONSTRAINT constraint_name; 

      OR REPLACE:如果你已经创建了一个同名的视图,那么加上or replace的话,就会覆盖前面的视图,否则的话就出出错。

      FORCE:强制创建视图,即使基表不存在也创建。

      NOFORCE:如果基表不存在,则不创建视图。默认值。

      view_name:视图名称。

      ALIAS_NAME:子查询表达式的别名。  

      WITH CHECK OPTION:表示只有被查询搜索到的数据行才可以进行插入,更新,删除操作。默认是不使用该项。

      constraint_name:是前面约束的名称。

      WITH READ ONLY:只能读取数据,不能增删改。

    • 简单视图示例:
    create view emp_view AS
    select * from dept
    where deptno<20;
    
    • 复杂视图示例:
    create or replace view emp_dept_salgrade AS
    select empno,ename,sal,dname,grade from emp e 
    inner join dept d using(deptno)
    inner join salgrade s on e.sal between s.losal and s.hisal
    with check option
    constraint cname;
    

      创建了一个以三张表为基表的多表关联视图,视图里面可以查询到的内容有emp表的empno,ename,sal和dept表的dname和salgrade表的grade(工资等级),并且是一个增删改的表。

    • 简单视图和复杂视图的区别。(简单和复杂之分是我自己的总结,不官方,理解就好。)

      1.简单视图是以一张表为基表存贮sql语句的视图,而复杂视图是以多张表为基表。

      2.简单视图可以通过视图来对表的数据增删改,而基于多表的复杂视图不可以。

    4.利用视图。

      注意:复杂视图只能查询(一般创建视图就是为了封装复杂sql查询语句,所以查询用的多,大多都是复杂视图。)简单视图可以增删改查。

    • 查询:跟通过表查询差不多。
    select * from emp_dept_salgrade;
    

      注意:如果create视图时用了check option语句,那么增删改的时候将受到select语句where的限制。例如,查询的是where 工资>3000职工的信息,那么在增删改的时候的数据的工资如果不大于3000的话,就会报错。

         如果create视图时用了read only语句,那么不论是复杂视图还是简单视图的话,都不可以增删改。

    • 增加:

      注意:如果通过视图往表里面增加数据时,必须符合表的约束。比如:

          create or replace view e AS
          select ename from emp
          with check option constraint nnn;

          insert into e(ename)
          values('5654','XU');

         这个视图里面只有一个ename列,且不是主键,那么你就不能增加数据了,因为基表里面的主键是非空的,通过视图增加数据也必须符合表的结构,所以不能通过这个视图增加。故在创建视图时,尽量把一些具有非空约束的列也放在select语句中,减少增加数据时的困难度。

    • 修改:

        update e set ename='xuwenshuai' where ename='KING';修改表中和视图中ename为KING->xuwenshuai

    • 删除:

        delete from e where ename='xuwenshaui';通过视图删除了ename=‘xuwenshuai’的一行数据。

     5.查看视图结构。(视图包含的数据种类和数据类型和一些约束。)
      DESCRIBE view_name;
      示例:describe emp_dept_salgrade;
      查询出来的结果如下:

        名称 空值 类型
        ----- -------- ------------
        EMPNO NOT NULL NUMBER(4)
        ENAME VARCHAR2(10)
        SAL NUMBER(7,2)
        DNAME VARCHAR2(14)
        GRADE NUMBER

     6.查询视图定义的信息(视图的名称,视图的字符长度,文本代码,约束)

    select  view_name ,text_length,text
    from user_views;
    

     查询结果如下:

     

     二.同义词:

    1.认识同义词:同义词就是给那么比较长的对象的名称创建一个别名,比如视图的名称,我有时也会写的很长,而同义词的作用就是:1:缩短对象名字的长度;2名字缩短之后,访问的时候也比较方便。

    2.准备工作:给用户分配创建视图的权限。

      grant create synonym to scott;

    3.创建同义词

      CREATE [PUBLIC] SYNONYM synonym_name FOR object_name;

      示例:为上面的复杂视图创建一个同义词。

      create synonym eds  for emp_dept_salgrade;

      注意:如果在创建同义词的时候加上了public字样的话,那么在删除的时候也要为它分配删除的权限,因为加上public的话这个同义词就是公共的。不加的话分配创建权限时会自动分配删除的权限。

    4.删除同义词

      DROP SYNONYM synonmy_name;

    欢迎批评指正

  • 相关阅读:
    Google Map Api V3 系列之 导航(包括清除线路)
    ENSP学习华为防火墙功能
    让Chrome 浏览器显示隐藏的https和www
    win7 x64 SP1把IE从8升级到11的先决条件
    解决“Windows照片查看器无法显示此图片,因为计算机上的可用内存可能不足……”
    火绒软件没有离线病毒库独立安装包的解决方法
    成功注册GitHub20211116
    网络基础知识积累
    【问题解决】win10连接了不可路由的以太网后,会阻止使用 WWAN 访问 Internet
    ENSP学习华为防火墙(第二天,20211127 )
  • 原文地址:https://www.cnblogs.com/bzx888/p/4805505.html
Copyright © 2011-2022 走看看