一、同义词

1.概念:可以直接输入其他用户所拥有的表名,而不是通过用户名、表名

2.优点:隐藏对象的名称和所有者;对于分布式数据库系统起到了透明位置的作用

3.类型:

私有:普通用户创建,并且由创建该同义词的用户使用

公有:公用的同义词必须由dba创建,供任何的数据库用户都可以使用,本地对象与公用对象同义词同名时,优先级本地对象优先。

3.语法:

创建:create [public] synonym 同义词名 for object (用户名.数据库对象)

例:select * from emp

create public sysnonym emp for sctto.emp

删除:drop synonym  同义词名

二、序列

1.概念:实现字段的取值能够按一定的规律自增

2.特点:生成唯一、连续的整数;用于生成主键值,可以正常升序也可以降序。

3.创建:

1.create sequence 序列名(seq_对应的表名)

minvalue 1   -------序列的最小值

maxvalue 100--------序列的最大值,最大可达10的27次方

start with 1--------起始值

increment by 1------每次自增的幅度

cache 10------------缓存,orecal每次生成序列数的时候,一次性生成多少个放在内存里面,便于应对频繁的序列数获取

cycle;--------------在指定范围里面的数是否要循环使用

4.访问

nextval:第一次使用序列时,一定要先运行nextval命令,这样可以返回序列的初始值

currval:返回序列的当前值,即最后一次引用nextval的值

5.使用方式:用于数据新增的时候,一般用于数据插入时生成主键

insert into 表名(主键字段名,其他字段)values (序列名.nextval,...);将来可以通过触发器,实现类似自增的效果

例:-----可以先为表t_table创建一个同义词

create public sysnonym t_table for scott.t_table

-----为t_table表新增数据

insert into t_table values(seq_dep.nextval,seq_dep.currval||'a')

-----通过序列可以生成用户希望的主键值,比如id必须满足三位。不足的左边 用0补齐

insert into t_table1 values(lpad(seq_dep.nextval,3,'0'),seq_dep.currval||'a')

三、视图

1.概念:视图是虚表,没有具体物理数据,是通过实体表的一种计算映射逻辑。主要就是为了方便和数据安全。

可以实现对复杂的sql语句的保存;视图是存储在数据字典里面的一条sql语句

2.优点:

进行服务端程序开发的时候,传输的数据量较少。

可以有针对性的选取用户需要的数据。

维护数据的独立性,可以实现从多个表检索数据

3.分类:

简单视图:简单视图只从单标获取数据,不包含函数,可以实现dml(增删改操作)

复杂视图:

4.语法:

标配语法:create [or replace] view v_视图名称 as  查询语句

查询:select*from v_emp1; select*from v_emp1 where ename like'%M%';

修改:update v_emp1 set job='销售'wheree name='sb';

添加:insert into v_emp2 values('2222','sb2','技术');

删除:delete from v_emp2 whereempno=2222

例1:create view v_dep_emp as

select e.*,d.name,d.loc from emp e join dept d on e.deptno=d.deptno

创建视图后下次需要查询时只需select * from v_dep_emp 就可以

例2:create view v_emp as

select e.empno,e.name,e.job from emp e

--视图的查询:select * from v_emp

--视图的DML操作:update v_emp set ename='SCOYY' where empno=8801

--强创建视图的权限给scott

grant create any view to scott

高配语法:create [or replace] view v_视图名称

-----给select 语句里面的字段取别名

------as select 语句,一条完整的sql语句,可以在语句里面定义别名

------[with check option] 指定插入或者修改的数据行必须满足的条件

------[with read only] 可以确保视图不被修改

例1:创建一个视图,里面显示,部门名称,该部门的最高最低薪水,平均薪水

create or replace view v_depemp_sal

(name,minsal,maxsal,avgsal)

as select d.name,min(e.sal),max(e.sal),trunc(avg(e.sal)) from emp e join dept d on

e.deptno=d.deptno group by d.name

--创建结束后可通过语句:select * from v_depemp_sal 进行查询

例2:创建一个简单的视图,里面只包含depNo=10的员工数据,姓名,编号

create or replace view v_emp2

as select e.empno,e.ename,e.job,e.deptno from emp e where e.deptno=10

with check option constraint v_dep10_ck

----通过如下语句进行验证

select * from v_emp2

update v_emp2 set deptno =20 where empno=7728运行该语句时将会出现“标识符无效”错误

四、索引

1.什么是索引:

可选的结构、加快sql语句的执行、在逻辑和物理上独立于表里面的数据、orecal会自动进行索引的维护

2.索引的类型:

唯一索引:确保列里面没有重复的值,oracle会自动为主键和唯一键创建唯一索引,

唯一键:创建了唯一约束的列,就是唯一键,

create unique index 索引名 on 表名(字段名)

索引加快速度的原理:

如果没有索引,数据库系统会按照顺序查找的原则进行数据查找。

如果创建了索引,那么首先会开辟一个空间,存放跟索引有关的数据内容,比如如果是主键,

会有一个空间专门保存某张表的主键值。有了索引数据以后,系统会利用类似折半查找的方式

来查找数据,这个时间复杂度是log2N

组合索引:

一般将多个字段组合在一起进行索引

组合索引的使用情况:1、比如表里面有姓名这样的字段,需要经常被查询,

可以考虑对姓名创建一个索引,可以提升效率

create index 索引名 on 表名(字段1,字段2,字段3)

3.如何创建索引:

a .在需要经常检索的列上面创建索引,可以提高查询效率;

b.关于使用符号对于索引的影响,<>,!=会导致索引使用失败,系统照样用全表查询;

c.在查询里面使用函数的时候,要提升检索速度,就要创建对应函数的索引;

d .需要注意类型的匹配,有时候根据内容可以查找到,但如果类型不匹配,就无法利用索引,

数据库会自动变成全表查询

4.索引的优点:大大加快数据检索的速度

5.索引的缺点:

a. 创建索引和维护索引要耗费时间,随着数据量的增加而增加

b.索引是需要占据物理空间

c.对数据进行增删改的时候,索引也要动态的维护,降低了数据维护的速度

6.不适合创建索引的列:

a.很少进行检索查询的列

b.对于内容差异程度低的列,不要创建索引,索引无效

c.blob列,数据量太大的

d.增删改操作比查询操作频繁的列

7.内容特征方面进行索引类型划分

a.平衡树,内容差异程度高,比如,id,每一条记录都不同

b.位图,内容差异长度低,比如性别,比如民族

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐