一、视图(窗口,遮蔽一些不需要的数据)
1.定义
视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的。视图只有逻辑定义。每次使用的时候,只是重新执行SQL。
视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。
2.作用
(1)提供各种数据表现形式,以便符合用户的使用习惯(主要手段:使用别名)
(2)隐藏数据的逻辑复杂性并简化查询语句, 多表查询语句一般是比较复杂的, 而且用户需要了解表之间的关系, 否则容易写错;
(3) 限制某个视图只能访问基表中的部分列或者部分行的特定数据,这样可以实现一定的安全性
3.创建语法(通常不要通过视图去修改,视图创建的时候,通常要加上with read only)
--创建视图,如果存在就替换掉
create [or replace] view 视图名名称
[(列1,列2...)] --可以省略,则默认从下面的select列名生成
as select
(列1,列2...)
from... [ with read only];
create or replace view view_test
as select ename,job,mgr from emp with read only;
二、同义词(别名,小名)
1.定义
和视图图的功能类似,就是一种映射关系。是数据库方案对象的一个别名。这里的数据库方案对象指表、视图、序列、存储过程、包等。
2.作用
(1)简化数据库对象名称,简化了数据库对象的访问
(2)提高了数据库对象访问的安全性
(3)不占内存空间,节省大量的数据库空间
3.创建语法
create [public] synonym 新的名称 for 想要修改的名称;
--为view_test视图取个别名为person
create synonym person for view_test;
三、序列(主键自增,类似MySQL中的auto_increment)
1.定义
序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。不占用磁盘空间,占用内存。序列是递增,而且连续的。oracle主键没有自增类型,所以一般使用序列产生的值作为某张表的主键,实现主键自增。
2.作用
生成表的主键值,类似于MySQL中的auto_increment
3.创建语法
--创建序列
create sequence 序列的名称
[start with 从几开始]
[increment by 每次增长多少]
[maxvalue 最大值 | nomaxvalue]
[minvalue 最小值 | nominvalue]
[cycle | nocycle 是否循环 ] --1,2,3,1,2,3
[cache 缓存的数量3 | nocache]; --1,2,3,4,5,6
--如何从序列获取值
select 序列名称.nextval from dual; --nextval : 下一个值
select 序列名称.currval from dual; --currval : 当前值
--注意: currval 需要在调用nextval之后才能使用
--永不回头,往下取数据, 无论发生异常, 回滚
--创建一个 1,3,5,7,9......30
create sequence seq_test
start with 1
increment by 2
maxvalue 30
cycle
cache 10;
select seq_test.nextval from dual; --需要先使用nextval
select seq_test.currval from dual; --然后才能使用currval
四、索引(大数据量快速搜寻,类似于书籍中的索引)
1.定义
索引是数据库对象之一,用于加快数据的检索,类似于书籍的索引。在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信息。
如果某一列数据量比较大,并且你经常用来作为查询条件,那么就有必要创建索引
2.作用
提高查询效率,一旦建立了索引,在用户表中建立、更改和删除数据库时, Oracle就自动地维护索引
3.创建语法
create [unique] | [bitmap] index 索引名称 --unique表示唯一索引,bitmap表示创建位图索引
on 表名
([列1 [ASC|DESC],列2 [ASC|DESC],…] | [express])
[cluster 指定一个聚簇名称]
[initrans 初始事务入口数]
[maxtrans 最大事务入口数]
[pctfree 索引数据块空闲空间的百分比] --指定索引在数据块中空闲空间
[storage 储存参数数量]
[tablespace 表空间名称]
[nosort]; --表示创建索引时不进行排序,默认不适用,如果数据已经是按照该索引顺序排列的可以使用
--对allStr表的name列创建一个名为characters的索引
create index characters on allStr(name);