Oracle索引、视图、序列

1.索引

索引类似于书的目录,可以提高查询效率。但它并不是在所有情况下都会优化查询,它是在大量数据查询时,每次查询的数据量在表的总数据量30%以下时,会提高效率。由于索引会降低添加和修改的执行效率,所有一般是给增删改操作比较少表上建立。

单列索引:给某个列建一个索引,叫单行索引

联合索引:给多个列建一个索引,叫联全索引,如果联合索引,在查询时,使用了第一个索引列作为条件,那么它会使用索引提高查询效率,如果使用了非第一个索引列作为条件,它不会使用索引。

--创建索引
create index index_name on table_name(col_name[,col_name]);
create index:index索引关键字
    index_name:索引名称
    table_name:表名
    col_name:索引列名
    
--给ename列建立索引
create index ind_emp_name on emp(ename);
​
--使用索引列作为查询条件时,不要在索引列上进行数学运算
create index ind_emp_sal on emp(sal);
select * from emp where sal*12>10000;   --这样写条件不会使用索引
select * from emp where sal>10000/12;    --这样它就会使用索引
--删除索引:
drop index 索引名;
drop index ind_emp_sal;
drop index ind_emp_name;

2.视图

视图通过定制的方式显示来自一个或多个表的数据,可以视为“虚拟表”或“存储的查询”,创建视图所依据的表称为“基表”。

视图的优点有:提供了另外一种级别的表安全性、隐藏的数据的复杂性、简化的用户的SQL命令、隔离基表结构的改变、通过重命名列,从另一个角度提供数据

--创建视图
CREATE [OR REPLACE] [FORCE] VIEW view_name [(alias[, alias]...)] AS select_statement [WITH CHECK OPTION] [WITH READ ONLY];
    create view:view视图关键字
    OR REPLACE:如果视图已经存在,则替换旧视图。
    FORCE:即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用。
    view_name:视图名称,符合标识符命名规范
    别名:别名的数量要和后面的查询语句的列相同
    WITH CHECK OPTION 子句可以保证让你只能在视图的条件之内对视图进行DML
    WITH READ ONLY:表示是一个只读视图
    
--例如:
create view view_dept_emp as select e.*,d.dname,d.loc from emp e,dept d where e.deptno=d.deptno;
--视图的使用:
select * from view_dept_emp;
--删除视图
DROP VIEW 视图名称;

3.序列

序列是Oracle中自动生成一个序列的对象,一般用来生成表的主键的值

--创建序列语法:
create sequence sequence_name start with startValue increment by inrValue minvalue minValue maxvalue maxValue cache|nocache cycle|no cycle
    create sequence:sequence序列关键字
    sequence_name:序列名称,符合标识符命名规范
    start with satrtValue:指定序列的初始值,startValue是一个自然数
    increment by inrValue:指定序列的值每次增加多少,inrValue 是一个自然数 一般用1
    minvalue minValue:指定序列的最小值 minValue是一个自然数据
    maxvalue maxValue:指定序列的最大值 maxValue是一个自然数据
    cache|no cache:指定序列缓存,默认缓存20个
    cycle|no cycle:指定序列是否循环生成
    
--创建一个序列
create sequence my_seq start with 1 increment by 1;
--序列的两个属性
nextval:取序列的值,并且序列的值增加
currval:取序列的当前值,序列值不会变
--序列名.属性
select my_seq.nextval from dual;
select my_seq.currval from dual;  --不能直接取当前值
insert into 表名 values(my_seq.nextval,'值','值');
--使用ALTER SEQUENCE语句修改序列,不能更改序列的START WITH参数
 ALTER SEQUENCE stu_seq MAXVALUE 5000 CYCLE;
--使用DROP SEQUENCE语句删除序列
DROP SEQUENCE stu_seq;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

特亿安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值