欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Oracle day_02 其他数据库管理对象

程序员文章站 2022-06-16 20:26:56
...

视图  

试图我们理解为虚表

视图是不存数据的, 它相当于封装起来的sql语句

最大优点是简化复杂的查询 和insert  delete update 没有关系

创建视图  

create or replace  view   视图名字

as 

select  语句

from  表名

where  关系

Oracle day_02 其他数据库管理对象

create or replace  的意思是, 如果有这个视图就覆盖他, 没有的话就创建这个视图

只读视图

 create or replace view empinfoview
    as
   select e.empno,e.ename,e.sal,e.sal*12 annsal ,d.dname
    from emp e , dept d
    with read only 

加上with read only 之后就变成了一个只读视图

还有一个叫做 with check option  这个的意思是, 比如

create or replace view  testview
as 
select * from emp where eid = 10 ; 

比如我们创建testview 视图这个时候我们通过视图插入数据

insert into testview values (*****,10);  
insert into testview values (*****,20 ); 

这个时候, 第一个会成立, 第二个就不会成立 

check option 的意思是支持当前视图 ,

view 对象的引进是为了简化查询, 不建议用视图对数据进行修改, 因为会收到很多的限制

屏蔽DML操作

可是使用with  read only 选项屏蔽对视图的DML操作

任何DML操作都会返回一个Oracle servlet 的错误


序列

mysql 中的auto_increment  这个自增长个和序列要实现的功能都一样

序列 ------->数组 ----------->内存

序列可以提高访问效率, 因为存在内存中

【1,2,3......20】 默认是20 如果超过了在增加

默认创建序列

create sequence sequence  

increment by n  步长 

start with n  数组开始值

maxvalue n   | nomaxvalue  最大值, 没有最大值

minvalue n  | nominvalue  最小值, 没有最小值

cycle | nocycle  

cache n    默认数组长度 ,    nocache  数组长度为1

在序列中是有个指针的, 默认是不指向 数组的任何一个值,取出一个值他就像后面移动一个位置,要操作指针, 就要了解序列的属性

nextval   下一个值

currval  当前的值

创建序列

create sequence myseq  ;

创建一个表

create table testseq (tid number , tname varchar2(20)); 

插入数据

insert into testseq  values (myseq.nextval,'aaa');

然后我们查询数据

select * from testseq ;

结果为

       TID TNAME
---------- --------------------
         2 aaa
         3 aaa
         4 aaa

         5 aaa

这个相当于auto_increment  但是比auto_increment 强大的多

序列在有序 的情况下有可能出现裂缝出现裂缝的原因是

 回滚   回滚下,就数据不连续了

 系统异常    序列在内存中, 如果内存停电了就没了 当前的指针就没了,

 多表共用一个序列   相当于多个线程共享一个资源


索引(目录)

通过主键查询比较快, 因为主键的本质是一个索引

索引是用于加速数据存取的数据对象 ,合理的使用索引可以大大的降低i/o次数,从而提高数据访问性能

索引的工作原理和目录的工作原理差不多

Oracle day_02 其他数据库管理对象

oracle 中表的类型, 标准表, 索引表, 虚拟表

数据库的执行优化 ,验证用索引查询的快

想看一条语句的执行计划在执行语句的前面加上explain plan

我们看结果  

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     3 |   261 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| EMP  |     3 |   261 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------
执行结果, 我们可以看出, 这个语句耗用cpu  为6
创建执行计划
explain plan for select * from emp where deptno =10  ;


执行语句
select * from table(dbms_xplan.display);
| Id  | Operation                   | Name    | Rows  | Bytes | Cost (%CPU)| Tim
e     |

--------------------------------------------------------------------------------
-------

|   0 | SELECT STATEMENT            |         |     3 |   261 |     2   (0)| 00:
00:01 |

|   1 |  TABLE ACCESS BY INDEX ROWID| EMP     |     3 |   261 |     2   (0)| 00:
00:01 |

|*  2 |   INDEX RANGE SCAN          | MYINDEX |     3 |       |     1   (0)| 00:
00:01 |

--------------------------------------------------------------------------------
-------

用了索引的为5 

这说明了 提高了效率 是 索引由 oracle 维护

不要什么时候建立索引?  

列中数据值分布范围很广 

列经常出现在where 字句或连接条件中出现

表经常被访问而且数据量很大,访问数据大概占数据的2%到4%

表经常被更新

索引可以提高查询效率是一个必要条件,但不是充分条件

oracle 中索引类型

1. B树(默认) 索引是一颗树,是一颗有规律的树,可以通过算法, 加快索引的遍历, 如果大家要想考计算机专业的研究生 ,数据结构, 树状结构,链状结构都要懂 

2.位图

单行索引

    单行索引一个基于单个列所建立的索引,比如

create index 索引名 on  表明 (列名)

符合索引

复合索引是基于两个列或者多个列的索引,在同一涨表上可以有多个索引,但是要球列的组合不许不同,比如

同义词

同义词, 和别名基本上没有区别

管理员授权

需要在管理员的用户下

Oracle day_02 其他数据库管理对象

grant  权限   to  用户  ;