oracle 序列 视图

1 创建视图

<span style="font-size:14px;">create suquence  序列号名
minvalue **  --为最小值
maxvalue ** --为最大值
start  with  ** --初始值
increment by ** --每次增加的值</span>
<span style="font-size:14px;">cache **;  --内存序列值个数</span>
 

可以利用序列自动生成主键值,如果不设定cycle循环的话 也可为nocycle,每一个序列号都是不重复的(即达到最大值不能在进行实例化)。

若设置cycle 达到最大值后可重复实力化。

序列号是递增的。

select  序列号名.nextval   from   dual; 每执行一次按increment by 设定的值增加一次

select  序列号名.currval   from  dual; 显示当前值


cache 作用:如果指定cache值,oracle 就可以预先在内存里放置一些序列,这样存取快些,

cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。


2 序列应用

insert   into  表名  values  (序列号名.nextval,‘  ***’,‘****’);

commit;--表示提交 


2 视图

概述:

@1  视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据,视图将查询的结果作为一个表表示,因此视图可以看做一个存储的查询或一个虚拟表。视图来源于表,所有对视图的修改都会反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器。

@2  与表不同,视图不会分配存储空间,视图中也不会包含实际的数据。视图只是定义了一个查询,视图中的数据是从基表中获取,这些数据在视图被引用时动态的生成。由于视图基于数据库中的其他对象,因此一个视图只需要占用数据字典中保存其定义的空间,而无需额外的存储空间。 

@3 视图的列名可以被任意改变,而不会影响此视图的基表 。使应用程序不会受基表定义改变的影响 

@4 在一个视图的定义中查询了一个包含4 个数据列的基表中的3 列。当基表中添加了新的列后,由于视图的定义并没有被影响,因此使用此视图的应用程序也不会被影响。 

@5视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。   

作用 :减少复杂性和增强安全性

复杂性:当你查询语句非常复杂时,可以将此复杂的语句转换为一个视图,通过查询视图,是查询变得简单;

SELECT d.dname,count(*) as NUM_EMPS
FROM emp e, dept d
WHERE e.deptno=d.deptno
GROUP BY dname;

可以把次查询转换为SELECT dname,num_emps FROM my_view;(此时视图在幕后做很多事,使得这个过程让终端用户或者应用程序看起来非常简单。

安全性:

视图也可以用于加强安全性。让我们假设一下,我只想要用户BOB看到EMP表中的ENAME 和DEPNO两个列。我可以使用如下所示:

GRANT select ON emp TO bob;

但是上面的命令会使BOB看到表的全部内容。我可以写下如下的一个视图,使BOB只看到自己能够看到的列:

CREATE VIEW bob_emp AS SELECT ename,deptno FROM emp; GRANT select ON bob_emp TO bob;

通过这两条命令,BOBO只能在视图中看到这个表中的两个列。

让我们更进一步的讨论一下安全性的概念。假设我们想要使得每个人都可以查询EMP表,但是只是他们自己的记录。我可以写出如下的视图:

CREATE VIEW my_emp AS SELECT * FROM emp WHERE ename=USER; GRANT select ON my_emp TO public;

当一个用户查询MY_EMP表示,上述视图只会返回那些ENAME列值为他们自己的用户名(userid,由USER psuedo 列定义 )的数据行。用户没有直接对EMP表进行SELECT查询的权限,但是可以通过视图来访问表。这个概念可以延伸到支持虚拟私人数据库(VPD


--创建用户

create user 用户名

identified by password

--视图
--简单视图
CREATE VIEW vw_emp  AS
       SELECT empno,ename,hiredate FROM emp;


CREATE VIEW vw_emp1 AS
       SELECT ename,hiredate,sal,comm FROM emp;


SELECT * FROM vw_emp;
SELECT * FROM vw_emp1;


--复杂视图
CREATE VIEW vm_emp3(deptno,ecount,avgsal) AS
       SELECT deptno,COUNT(1),round(AVG(sal),2) FROM emp GROUP BY deptno;
       
RENAME vm_emp3 TO vw_emp3;
SELECT * FROM vw_emp3;
GRANT select ON emp TO USER_name;
create user user_name
identified by PASSWORD
SELECT*FROM user_name;


--连接视图
CREATE VIEW vw_emp4 AS
       SELECT e.empno,e.ename,d.dname,d.loc
       FROM emp e,dept d 
       WHERE e.deptno=d.deptno;


SELECT ename,dname FROM vw_emp4;


--只读视图
CREATE VIEW vw_emp5 AS
       SELECT * FROM emp WITH READ ONLY;


SELECT * FROM vw_emp5;














  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值