视图、序列、索引、同义词

每天随机学两条SQL语句:

查询用户权限:select * from session_privs;
以管理员登录:sqlplus / as sysdba;

一。视图

特点简单视图复杂视图
表的数量一个一个或多个
约束函数没有
是否包含分组不包含包含
可以对试图进行更新可以不一定

1.创建简单视图

①创建一个视图,包含部门号为10的雇员信息。
create or replace view empvu10
as select empno, ename, job
from emp
where deptno = 10;
②别名(查询语句中)
create or replace view empvu10
as select empno “员工编号”,ename “员工姓名”,sal “员工工资”
from emp
where deptno=10;
③别名2(查询语句外)
create or replace view mepvu20( emplyee_number, name, salary)
as
select empno, ename, sal
from emp
where deptno=20;

2.创建复杂视图

create or replace view dept_sal_vu(“部门名称”,“最大工资”,“最小工资”,“平均工资”)
as
select d.dname, max(e.sal),min(e.sal),avg(e.sal)
from emp e,dept d
where e.deptno= d.deptno
group by d.dname;

3.内联视图

就是临时表

select a.ename, a.sal, a.deptno, b.maxsal
from emp a,(select deptno, max(sal) maxsal from emp group by deptno)b
where a.deptno = b.deptno
and a.sal<b.maxsal;

4.更改视图数据

①对于简单视图,可以把视图当作一张表,更改其中的某条数据。
update empvu20 set name=‘lisi’ where emplyee_number = 6666;
②对于复杂视图,不可以更改数据。
比如:
含有聚合函数、含有group by、含有distinct、含有rownum伪列。
③对于简单视图,也能限制视图修改功能
create or replace view mepvu20( emplyee_number, name, salary)
as
select empno, ename, sal
from emp
where deptno=20
with read only;

5.删除视图:

drop view empvu;

二。序列

1.定义:

自动产生唯一的数字;
是一个可以共享的数据库对象;
典型的用于生成数据库的主键值,节省应用程序的代码;
当缓存在内存中时,能够提升存取效率。

2.语法:

create sequence 序列名
[increment by n]
[start with n]
[{maxvalue n | nomaxvalue}]
[{minvalue n |nominvalue}]
[{cycle | nocycle}]
[{cache | nocache}];

3.例子

create sequence dept_deptno
increment by 1
start with 91
maxvalue 100
nocache
nocycle;

4.使用

①nextval
返回下一个可用的序列值。每访问一次将产生一个唯一的新值,即使对不同的用户,其值也是唯一的。
注意:nextval是不能rollback的。
②currentval
返回当前的序列值。只有当nextval被访问之后,currentval伪列才能包含一个值。

insert into dept(deptno, dname, loc) 
	values(dept_deptno.nextval, 'Tring','南京');

5.使用序列应注意:

①将序列值缓存在内存中,是这些值访问起来更快。
②下列情况会使序列的值产生间隔:
回滚操作
系统崩溃
序列值同时也用于其他表
③如果一个序列以nocache选项建立,那么可以通过查询user_sequences表来看下一个可用的序列值,而不会序列的当前值增加。

6.修改序列

alter sequences dept_deptno
increment by 1
maxvalue 9999
nocache

nocache;

7.修改序列应注意:

①必须是序列的拥有者,或者拥有序列的修改权限。
②只有将来会用到的序列值才会受到影响。
③只有重建序列才能更改序列的start with 选项。
④序列的修改可能会带来冲突,例如maxvalue如果小于当前值就会冲突。

8.删除序列

drop sequence dept_deptno;

9.删除序列应注意:

①一旦序列被删除了,序列就不可以被访问了。
②删除以前增加的序列值,依旧在。

10.查看序列:

select * from user_sequences;

三。索引

1.定义:

一个数据库模式对象;
Oracle利用索引来加快对数据行的访问;
依靠索引来快速定位数据,从而减少了磁盘的io次数;
与其他表是相互独立的数据库对象;
Oracle服务器自动对索引进行维护和使用;

2.创建

①自动创建
如果建表的时候加了primary key或者unique,则Oracle自动创建索引。
②手动创建
create index emp_ename_idx
on emp(ename);

3.什么时候建索引

①经常出现在where子句中的列,或者连接条件中频繁使用的列。
②包含的不同值很多的列。
③包含大量空值的列。
④表中数据行数非常大,而且只有2%-4%的数据行被查出来的列;

4.什么时候不建索引

①空表
②查询条件中不经常使用的列;
③大多数基于该表的查询,所查询出来的数据量远多于2%-4%;
④表被频繁修改;

5.查询所有索引:

select INDEX_NAME,INDEX_TYPE,TABLE_NAME from user_indexes;

6.查询某张表的索引建在哪一个列上:

select INDEX_NAME,COLUMN_NAME from user_ind_columns where TABLE_NAME=‘DEPT’;

7.删除索引

drop index dept_index;

四。同义词

1.创建:

为视图创建一个简短的名字:
create synonym d_sum
for dept_sum_vu;

2.删除

drop synonym s_sum;

注意:
可以把同义词建成共有的,这样大家就都能访问了。
create public synonym d_sum
for dept_sum_vu;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值