对象一:视图
优点:
1.简化复杂查询
2.限制数据访问
3.提供数据的相互独立
4.同样的数据,可以有不同的显示方式
但视图不能提高性能,它只是表的外壳,一种虚表。
视图建立在已有表的基础之上,视图赖以建立的这些表称为基表
可以将视图理解为存储起来的select语句
视图向用户提供基表数据的另一种表现形式
我们一般不会通过视图来修改表中实际数据,因为有很多权限限制,无法修改
--第一个视图: 员工号 姓名 月薪 年薪
由于无权限,必须先以管理员身份登入:sqlplus / as sysdba
然后授予scott用户创建视图的权限:grant create view to scott
SQL> create view view1
2 as
3 select empno,ename,sal,sal*12 annlsal from emp;
--复杂视图:只要含有表达式,2个表以上便为复杂视图
SQL> create view view2
2 as
3 select empno,ename,sal,sal*12 annlsal,dname
4 from emp e, dept d
5 where e.deptno=d.deptno;
SQL> create or replace view view2---》如果view2存在,则会覆盖原先的view2视图,重新创建view2
2 as
3 select empno,ename,sal,sal*12 annlsal,dname
4 from emp e, dept d
5 where e.deptno=d.deptno
6 with read only;--------->一般都是采用with read only只读,其他人无法修改表中的数据了
对象二:序列sequence:
可供多个用户用来产生唯一的数值的数据库对象
1.自动提供唯一的数值
2.共享对象
3.主要用于提供主键值(重点)
4.将序列值装入内存可以提高访问效率
序列完整定义:
CREATE SEQUENCE myseq
[INCREMENT BY n]--------------------->可选,上升间隔:默认是为1,如果为10,则10,20,30...
[START WITH n]----------------------->可选,起始值,默认为1
[{MAXVALUE n|NOMAXVALUE}]------------>可选,设置最大值,默认为主机操作系统允许的最大值
[{MINVALUE n|NOMINVALUE}]------------>可选,设置最小值,默认为主机操作系统允许的最小值
[{CYCLE|NOCYCLE}]-------------------->可选,是否循环数值,一般不会设置该属性,默认为不循环
SQL> create sequence myseq;
SQL> create table testseq
2 (tid number,tname varchar2(20));
--NEXTVAL,CURRVAL伪列
记住:nextval一定在currval之前制定,2则应同时有效
SQL> select myseq.CURRVAL from dual;
ORA-08002: 序列 MYSEQ.CURRVAL 尚未在此会话中定义
SQL> select myseq.NEXTVAL from dual;
SQL> select myseq.CURRVAL from dual;----》这样才会有结果
SQL> insert into testseq values(myseq.NEXTVAL,'aaa');
---------------》由于之前已使用过myseq,这里插入的开始值为前面的值的后一个,不会是从1开始
序列不连续:原因
1. 内存,长度20
2. 序列是一个公有对象
3. rollback序列不连续,使用rollback后,之前的值都没有了,然而下一个值还是依旧上升
对象三:索引:分为“B树索引(二叉树)”和“位图索引”
1.其被破坏或删除不会对表产生影响,其影响的只是查询速度
2.索引一旦被建立,是由Oracle内部管理系统自动维护,并且由它来决定何时使用,用户无需维护和指定使用哪条索引
3.表被删除,则索引就会被删除
4.原理是通过指针加速Oracle服务器的查询速度
5.通过快速定位数据方法,减少磁盘I/O
SQL> create index myindex on emp(deptno);
--何时创建索引:
1.列中数据值分布范围很广
2.列经常在WHERE子句中或连接条件中出现
3.表经常被访问而且数据量很大,访问的数据却是整个数据总量的2%~4%
对象四:同义词---synonym
SQL> select count(*) from hr.EMPLOYEES;
出现错误:
ORA-00942: 表或视图不存在
SQL> --为hr.EMPLOYEES起别名
SQL> create SYNONYM hremp for hr.EMPLOYEES;
出现错误:
ORA-01031: 权限不足 --->需要管理员授权:grant select on EMPLOYEES to scott
SQL> select count(*) from hremp;
---------》出现正确结果