Oracle中序列、索引、视图
1、序列
我们在mysql中要生成自增的id,必须使用auto_increment
关键字,但是Oracle中不支持此自增关键字、只能使用序列
来生成一系列自增(减)的整数值。
-
首先我们在PLSQL可视化工具对某个表来创建序列Sequences
-
使用Sequences
-
序列号名.nextval 查询序列下一个自增id
-
序列号名.nextval 查询序列下一个自增id
-
– 序列号名.currval 查询序列当前自增id
-
drop sequence 序列号名 (删除序列号)
select * from emp2; create table emp2 as select * from emp insert into emp2 values(sq_emp.nextval,sysdate) select sq_emp.currval from emp2
-
2、索引
索引:为了提高查询效率添加的列
- 添加索引的意义:
当我们oracle中没有使用索引查询数据时,会在大表中根据每个数据区(行)遍历所有的列信息,查询到数据后会记录rowid(物理地址),查询效率低下,那么这时候就要添加索引,索引相当于给主表添加了个子表,记录索引列和rowid(物理地址列),根据索引列查询到rowid,直接映射到大表的数据区,查询区内的所有列信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BBN1A32u-1596544053514)(upload\image-20200804181645359.png)]
-
添加索引
-- 添加唯一索引 create unique index ind_emp_ename on emp(ename); -- 添加普通索引 create index ind_emp_ename on emp(ename);
-
删除索引
drop index ind_emp_ename;
-
修改索引
-- 修改索引 alter table emp add constraint uq_ename unique(ename);
3、视图
-
本质:不含物理数据;仅仅包含一条查询的sql; 对视图的查询就是对视图上捆绑的sql进行嵌套查询;
-
优点: 可以使用视图进行某些物理数据隐藏
对数据提前做输出整理(整理到一个sql查询中)
--创建视图 create or replace view v_emp_dept as select e.empno,e.ename,e.job,e.deptno,d.dname,d.loc from emp e, dept d where e.deptno = d.deptno;
-
视图的分类:
简单视图: 数据来自一张表,并且没有数据变形(数据变形:通过 group by分组后的数据就是数据变形) 可以根据视图的数据对应到物理的数据区
**复杂视图:**数据来自多张表;或者有数据变形;
不能通过视图数据对应到物理数据区
复杂视图示例代码: 对复杂sql执行查询操作,后续查询时只需嵌套查询视图名即可
create view v_deptsal as select deptno, sum(sal) sum_sal from emp group by deptno; select * from v_deptsal;
-
– 视图的意义: 优化查询; 所以视图没有特殊要求的时候只用来查询;
-