同义词:将复杂的表名简化成一个简单的字符串,以后就可以通过简单字符串访问到
复杂的表
--私有同义词:自己创建自己使用
create synonym demp for scott.emp
select * from demp;
--公有同义词,可以被所有有权限的人使用
create public synonym eemp for scott.emp;
--修改同义词
create or replace public synonym eemp for scott.dept;
--删除同义词
drop synonym demp;
drop public synonym eemp;
//---------------------------------------------------------------------------------------
mysql,sqlsever都有自己的自动增长列,auto_increment, identity(1,1)
oracle没有定义好的自动增长列,需要自己手工创建,创建的叫序列sequence
create sequence s_abc --序列名
start with 1 --从1开始
increment by 1 --每次增长1
maxvalue 99999 --最大值
minvalue 1 --最小值
cycle --用完后是否循环,nocycle就是不循环
cache 20 --在缓存中准备好20个序列
--使用序列
select s_abc.nextval from dual;
--查看序列用到了哪一个
select s_abc.currval from dual;
--修改序列
alter sequence s_abc maxvalue 9999999
--删除序列
drop sequence s_abc
//--------------------------------------------------------------------------------------
视图 view
create or replace view v_emp
as
select empno as 用户编号,ename as 用户名
* from scott.emp
1. 简化SQL语句的访问:比如说一个非常复杂的sql语句,我们可以创建成一个视图,
然后再要使用这个非常复杂的sql语句的时候,就可以使用视图代替了
2. 视图可以封装原始表的列,从而隐藏访问数据的细节,让视图使用者不知道数据从哪张表来
从哪些列来
3. 注意,视图中并没有存放任何数据,是用户在使用时,临时从视图指定的语句得到数据
默认创建的视图,是可以进行增,删除,改的
create or replace view v_emp
as
select * from scott.emp
with check option constraint empno; --设定empno这一列不能被修改
警告:无论视图是如何设置的,都不要企图使用视图去修改数据,记住什么是view
4. 创建视图时,一般是建在已有表上的,但有时可以建在不存在的表上
开发中并行开发,可能出现表和视图开发不平行情况,所以要先建立伪视图
当表出现后,就会变成真视图
create or replace force view v_emp1
as
select * from emp1
--多表查询的视图
SQL> create or replace view v_emp2
as
select empno,ename,emp.deptno,dname from scott.emp emp inner join scott.dept dept on emp.deptno
=dept.deptno;
--删除视图
drop view v_emp2;
//-------------------------------------------------------------------------------------------------------------
索引就像字典中的目录,如果没有目录,查字典要一页一页去找,同样数据库的表中的内容也要一行一行去找
字典有了目录,可以通过目录快速定位页数
表如果建立了目录(index),就可以快速定位我们要的行,索引的建立需要我们定义,但使用时会有DBMS自动调用
强调:1.索引要建立在经常查询的列上2.索引并不是越多越好,可以加快查询速度,但是增删改的速度会降低
--标准索引
create index ix_emp on e(eid); --创建 索引 ix_emp 在 e表(eid列上);
--唯一索引:创建在没有重复值的列上,比如empno这一列,比如主键,如果创建表时创建了主键,默认主键就会有唯一索引
create unique index ix_emp1 on c(cid);
--组合索引: 创建在几列上的,如果查询时在where条件中同时出现了这几列,将会大大的加快查询的速度
create index ix_emp2 on c(cname,cdate);
--反向索引:建立在增长型的列上的,比如序列
create index ix_emp2 on d(cid) reverse;
alter index ix_emp3 rebuild noreverse;--将反向索引改为正向(标准索引)
-- 位图索引:主要是建立在有重复值出现的列中,多用在外键上
create bitmap index ix_emp4 on d(did)
-- 基于函数的索引:基于sql函数的索引,当用户调用函数时将加快查询速度
create index ix_emp5 on d(len(cname))--在d表的cname的列上建立一个len的函数,当用户的查询条件为len(cname)将加快查询速度
--索引组织表
create table i(
iid number,
iname varchar2(10))
organizition index
将数据和索引都在同表里,不建议使用,主要因为其不能分区