一、视图
概念:视图是在基本表之上建立的虚表,它的结构(定义的列)和内容(数据)来源于基本表。
一个视图可以对应一个基本表,也可以对应多个基本表。
1.视图和表的区别
1)视图中没有实际的数据,但是table有。
2)table是内容,视图是窗口。
3)视图可以让用户不接触表,保证安全性。
4)视图是虚表,table是实table。
5)视图的建立和删除只影响视图本身,不影响基本表。
6)视图是一种逻辑结构,表是物理结构。
2.建立视图
1)创建视图需要有create view权限,如果要在其它用户下创建视图,需要有create any view权限。
2)创建视图的语法:
create [or replace] [force] view 视图名 as 查询语句 [with read only];
or replace:如果存在同名的视图,则使用新视图替换已有的视图。
force:强制创建视图,不考虑基本是否存在,也不考虑是否朋使用表的权限。
with read only:用于定义只读视图。
例:登录system用户,给scott用户创建视图的权限
grant create view to scott;
1))创建视图用户查询部门编号为20号的员工的员工编号、员工名字、职务、部门编号。
create view emp_view as select empno,ename,job,deptno from emp where deptno=20;
2))查询视图内容:select * from emp_view;
如果往视图中添加数据,会影响到基本表
3)只读视图:只能用来查询数据,不能用来增删改数据。
create or replace view emp_view as
select empno,ename,job,deptno from emp
where deptno = 20 with read only; --创建只读视图替换原来的视图
select * from emp_view;
insert into emp_view values(4397,'王五','CLERK',20);--失败,只读视图只能查询
4)使用force关键字强制创建基本表不存在的视图。
create force view test_view as select * from test;
3.管理视图
1)查询视图结构:desc 视图名;
注:需要在命令窗口执行;
desc emp_view;
2)创建视图后,如果用户修改了视图所依赖的基本表的定义,视图就会被标记为无效状态,当用户用户再次访问视图时,数据库会自动重新编译视图。
3)删除视图:drop view 视图名;
二、创建索引
1)B树索引
B树索引是最常用的索引类型,也是默认使用的索引,底层使用B树结构组织并存放索引数据。
创建B树索引语法:create index emp_deptno_index on emp(deptno);
例:create index emp_deptno_index on emp(deptno);
2)位图索引
当列中值的基数很低时,建立B树索引显然不合适,此时则可以建立位图索引。
当值的数量/总行数<1%时,则建立位图索引。
建立位图索引语法:create bitmap index 索引名 on 表名(列名);
3) 反向键索引
如果列中的值是单调递增的序列,为了降低索引争用的情况,则可以使用反向键索引。
反向键索引的存储结构和B树索引相同,但是,使用反向键索引时,它会把每一个索引列的值反转,
如果2019,反转之后就是9102.这样就使得新数据在值的范围上分布更加均匀。
创建反向键的语法:
create index 索引名 on 表名(列名) reverse;
4) 函数索引:可以给索引列加上函数,如果存放的数据是由表中的数据应用函数之后得到的,而不是
直接存放在表中的数据本身,此时就可以使用函数索引。
例:
create index emp_job_index on emp(upper(job));
三、修改索引
1) 重建索引
语法:alter index 索引名 rebuild;
2) 合并索引
语法:alter index 索引名 coalesce deallocate unused;
四、删除索引
drop index 索引名;
drop index emp_deptno_index;
五、查询索引信息
在system模式下的数据字典中,dba_indexes中存放所有用户的索引信息
select * from dba_indexes where owner = 'SCOTT';