Oracle备忘录(十)--序列,索引

本文介绍了Oracle数据库中视图的概念和创建过程,包括如何创建和使用带读取限制的视图。同时,文章详细讲解了序列的生成、使用及特性,如缓存、循环等,并通过实例展示了序列在表插入中的应用。此外,还简单提及了索引的创建和同义词的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--视图 -- 虚表 (逻辑上存在)
--主要目的是为了简化数据的查询,可以将复杂查询的结果放入到
--视图当中,方便日后查询。
--可以对视图进行增删改(很多约束条件),但是不建议这么做

SQL> create view empview
  2  as
  3  select e.empno,e.ename,e.sal,e.sal*12 annlsal,d.dname
  4  from emp e,dept d
  5  where e.deptno=d.deptno;
create view empview
            *
第 1 行出现错误: 
ORA-01031: 权限不足 

---管理员执行
--SQK> grant create view to scott
--SQL> sqlplus / as sysdba

SQL> /          --再次执行

视图已创建。

SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID                                                                       
------------------------------ ------- ----------                                                                       
BIN$b9zRUzdaQfuXXqNhykffVA==$0 TABLE                                                                                    
MYPERSON                       TABLE                                                                                    
TEST2                          TABLE                                                                                    
EMPVIEW                        VIEW                                                                                     
DEPT                           TABLE                                                                                    
EMP                            TABLE                                                                                                                                                                      

已选择12行。

SQL> select * from EMPVIEW;

     EMPNO ENAME        SAL    ANNLSAL DNAME                                                                            
---------- ---------- ----- ---------- --------------                                                                   
      7369 SMITH        800       9600 RESEARCH                                                                         
      7499 ALLEN       1600      19200 SALES                                                                            
      7521 WARD        1250      15000 SALES                                                                            
      7566 JONES       2975      35700 RESEARCH                                                                         


SQL> create or replace view empview
  2  as
  3  select e.empno,e.ename,e.sal,e.sal*12 annlsal,d.dname
  4  from emp e,dept d
  5  where e.deptno=d.deptno
  6  with read only
  7  ;

视图已创建。


-----------********序列*******--------
--序列-- > 数组 -- > 内存 (因此可以提高性能)

--cache指定数组的大小,如果nocache 那么就每次生成一条
--就不能提高效率

--cycle 一般我们用序列来当做主键,因此不要求循环,循环就重复了
--nocycle


--序列有两个伪列:nextval , currval  

SQL> create sequence myseq;

序列已创建。
--如果什么都不指定,默认increment by 1
--start with 1
--nomaxvalue
--nominvalue



--序列还没开始用的时候,先用nextval ,这样才有currval

SQL> select myseq.nextval from dual;
SQL> select myseq.currval from dual;

   CURRVAL       NEXTVAL                                                                                                              
----------      ---------                                                                                                         
         1            1                                                                                                                                                                                                                      

已选择 1 行。

SQL> create table tableA(tid number,tname varchar2(20));

表已创建。
SQL> insert into tableA values(myseq.nextval,'aaa' );

已创建 1 行。

SQL> /

已创建 1 行。

SQL> /

已创建 1 行。

SQL> commit;

提交完成。


SQL> /*
SQL> --序列的不连续
SQL> --1. 序列是公有对象
SQL> --2. 掉电(停电后,在内存缓存中的20个数字就没有了)
SQL> --3. 回滚
SQL> */
SQL> insert into tableA values(myseq.nextval,'aaa' );

已创建 1 行。

SQL> /

已创建 1 行。

SQL> rollback;

回退已完成。

SQL> insert into tableA values(myseq.nextval,'aaa' );

已创建 1 行。


修改序列 
alter sequence 序列名
...
...
只会影响将来的值,已经用过的值不会改变



SQL> --索引(原理见下面的图)
SQL> --index
SQL> create index myindex on emp(deptno);

索引已创建。



SQL> --同义词 -->   别名
SQL> select count(*)
  2  from hr.EMPLOYEES;
from hr.EMPLOYEES
        *
第 2 行出现错误: 
ORA-00942: 表或视图不存在 

--hr用户给scott授予select employees表的权限
--grant select on employees to scott

SQL> /

  COUNT(*)                                                                                                              
----------                                                                                                              
       107                                                                                                              

已选择 1 行。

--创建同义词
SQL> create synonym  hremp for hr.EMPLOYEES;
create synonym  hremp for hr.EMPLOYEES
*
第 1 行出现错误: 
ORA-01031: 权限不足 

---管理员授予scott创建同义词的权限
--grant create synonym to scott ;

SQL> /

同义词已创建。

SQL> select count(*) from hremp;

  COUNT(*)                                                                                                              
----------                                                                                                              
       107                                                                                                              

已选择 1 行。

SQL> spool off

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值