数据库原理与应用(Oracle) 笔记3 ——视图(学习ing)

视图,可视化的表。

视图与表的区别

1)视图不保存实际数据,只保存生成视图的语句;
2)当访问视图时,生成视图的语句会被运行,从基表获得数据生成视图数据;
3)对基表的修改会影响视图数据;
4)对视图的修改也会反映在基表上。
视图是动态的,表是静态的。

视图的作用

1)简化sql书写
2)隐蔽数据细节
3)实现行列级别的安全控制
4)解决TOP n 问题

例1-TOP n问题的解决

利用视图作为中间过渡

SQL> create view vtep as select * from emp order by sal desc;

视图已创建。

SQL> select * from vtep where rownum<3;

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7839 KING                 PRESIDENT                     17-11-81           5000                 10
      7788 SCOTT                ANALYST                  7566 24-1-87           3000                 20

例2-利用视图实现行列级的访问控制

如果用户有用视图的访问权,即使没有基表的访问权也可以访问视图。
实现了行列级的访问控制。

SQL> alter session set "_ORACLE_SCRIPT"=true;

会话已更改。

SQL> create user x2 identified by abc;

用户已创建。

SQL> grant connect to x2;

授权成功。

SQL> conn x2/abc;
已连接。
SQL> select * from emp;
select * from emp
              *1 行出现错误:
ORA-00942: 表或视图不存在


SQL> select * from c#scott.emp;
select * from c#scott.emp
                      *1 行出现错误:
ORA-00942: 表或视图不存在
SQL>conn c##scott/tiger
SQL> grant select on emp to x2;

授权成功。

SQL> conn x2/abc
已连接。
SQL> select * from c##scott.emp;

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 17-12-80            800                 20
      7499 ALLEN                SALESMAN                 7698 20-2-81           1600        300      30
      7521 WARD                 SALESMAN                 7698 22-2-81           1250        500      30
      7566 JONES                MANAGER                  7839 02-4-81           2975                 20
      7654 MARTIN               SALESMAN                 7698 28-9-81           1250       1400      30
      7698 BLAKE                MANAGER                  7839 01-5-81           2850                 30
      7782 CLARK                MANAGER                  7839 09-6-81           2450                 10
      7788 SCOTT                ANALYST                  7566 24-1-87           3000                 20
      7839 KING                 PRESIDENT                     17-11-81           5000                 10
      7844 TURNER               SALESMAN                 7698 08-9-81           1500          0      30
      7876 ADAMS                CLERK                    7788 02-4-87           1100                 20
      7900 JAMES                CLERK                    7698 03-12-81            950                 30
      7902 FORD                 ANALYST                  7566 03-12-81           3000                 20
      7934 MILLER               CLERK                    7782 23-1-82           1300                 10

已选择 14 行。
SQL> conn c##scott/tiger
已连接。
SQL> revoke select on emp from x2;

撤销成功。
SQL> conn x2/abc
已连接。
SQL> select * from  c##scott.emp;
select * from  c##scott.emp
                        *1 行出现错误:
ORA-00942: 表或视图不存在
SQL> select * from c##scott.vtep;

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7839 KING                 PRESIDENT                     17-11-81           5000                 10
      7902 FORD                 ANALYST                  7566 03-12-81           3000                 20
      7788 SCOTT                ANALYST                  7566 24-1-87           3000                 20
      7566 JONES                MANAGER                  7839 02-4-81           2975                 20
      7698 BLAKE                MANAGER                  7839 01-5-81           2850                 30
      7782 CLARK                MANAGER                  7839 09-6-81           2450                 10
      7499 ALLEN                SALESMAN                 7698 20-2-81           1600        300      30
      7844 TURNER               SALESMAN                 7698 08-9-81           1500          0      30
      7934 MILLER               CLERK                    7782 23-1-82           1300                 10
      7521 WARD                 SALESMAN                 7698 22-2-81           1250        500      30
      7654 MARTIN               SALESMAN                 7698 28-9-81           1250       1400      30
      7876 ADAMS                CLERK                    7788 02-4-87           1100                 20
      7900 JAMES                CLERK                    7698 03-12-81            950                 30
      7369 SMITH                CLERK                    7902 17-12-80            800                 20

已选择 14 行。

视图的创建与删除

·视图的创建

create view

create view e10 as select * from emp where deptno=10;

·衍生列

衍生列,利用已有的列通过一系列运算而生成的新列。
无法修改。

·视图的删除

drop view

SQL> drop view vtep;

视图已删除。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值