您的位置:首页 > 数据库 > Oracle

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

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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息