0.概览
对象 | 英文名 | 描述 |
---|---|---|
表 | table | 由行和列组成,用于存储数据 |
视图 | view | 从表中抽出的逻辑上相关的数据集合 |
序列 | sequence | 提供有规律的数值,主要用于提供主键值,一般用于insert时 |
索引 | index | 提高查询效率 |
同义词 | synonym | 给对象起别名 |
1.视图
创建简单视图:create view industryview as select * from t_industry;
该简单视图可以用于crud。但不建议通过视图对表进行修改。
查看视图结构:desc industryview ;
通过视图进行查询:select * from industryview;
创建只读视图:create or replace view industryview as select * from t_industry with read only;
删除视图:drop view industryview;
视图是一种虚表,视图赖以建立的表称为该视图的基表。
视图分为简单视图和复杂视图:
特性 | 简单视图 | 复杂视图 |
---|---|---|
表的数量 | 一个 | 一个或多个 |
函数 | 没有 | 有 |
分组 | 没有 | 有 |
DML操作 | 可以 | 有时可以 |
当视图中含有以下元素之一时,不能进行DML操作:
1.组函数
2.group by 语句
3.distinct 关键字
4.rownum 伪列
创建复杂视图:
查询各部门的最低工资,最高工资和平均工资
create view dept_view (name,minsal,maxsal,avgsal) as select d.dept_name ,min(e.salary),mix(e.salary),avg(e.salary)
from emp e,dept d where e.dept_id = d.dept_id group by d.dept_id;
视图的优点:
1.限制数据访问
2.简化复杂查询
注意:视图不能提高性能。
2.序列
创建序列
创建序列:create sequence myseq;
完整语句:create sequence myseq2 INCREMENT BY 1 START WITH 1 MAXVALUE 99999 NOCACHE NOCYCLE; 不使用循环--NOCYCLE。
|
查看下一个序列值:select myseq.nextval from dual;
查看当前序列值:select myseq.currval from dual;
注意:nextval 应在currval 之前指定,二者应同时有效。
应用场景:
create table testseq (tid number,tname varchar2(20));
insert into testseq values(myseq.nextval,'aaa');
注意:序列不能被rollback,即:当插入的数据被回滚后,再次插入数据,序列值还是从未被回滚的时候继续增加下去。
序列出现裂缝的情况:
1.insert回滚
2.多个表使用同一个序列
3.系统异常
查询序列:user_sequences last_number
select * from user_sequences;
如果指定为NOCACHE 选项,则last_number显示的值为nextval 的值。
如果使用了cache则last_number显示的是下一个缓存段开始的第一个数据,不能看出nextval值,只能推断nextval的值小于该值。
但使用缓存可以提高访问效率。
修改序列
alter sequence myseq2 INCREMENT BY 2 MAXVALUE 99999 NOCACHE NOCYCLE;
相对于创建序列,修改序列没有START WITH。所有想要改变序列的初始值,只能通过删除序列后重建序列的方法实现。
修改序列只有将来的序列值受到影响,之前已经生成的序列中不会受到影响。
删除序列
drop sequence myseq2;
删除后序列不能再被引用。
3.索引
创建索引
create index myindex on testseq(tname);
查询索引 user_indexes user_ind_columns
select * from user_indexes;
select * from user_ind_columns;
select uic.index_name,uic.column_name,uic.column_position,ui.uniqueness
from user_indexes ui ,user_ind_columns uic
where ui.index_name = uic.index_name
and ui.table_name = 'TESTSEQ'; --注意:此时表名要大写。
删除索引:
drop index myindex ;
4.同义词
创建同义词:create synonym testseq_alias for testseq;--为表创建同义词,也可以为视图创建同义词
通过同义词进行查询:select * from testseq_alias;
删除同义词:drop synonym testseq_alias ;
同义词的意义:
1.方便访问其他用户的对象;
2.缩短对象名字的长度,方便偷懒。