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;

    欢迎批评指正

  • 相关阅读:
    Zabbix5 Frame 嵌套
    Zabbix5 对接 SAML 协议 SSO
    CentOS7 安装 Nexus
    CentOS7 安装 SonarQube
    GitLab 后台修改用户密码
    GitLab 查看版本号
    GitLab Admin Area 500 Error
    Linux 安装 PostgreSQL
    Liger ui grid 参数
    vue.js 是一个怪东西
  • 原文地址:https://www.cnblogs.com/bzx888/p/4805505.html
Copyright © 2011-2022 走看看