oracle数据库对象

一、同义词
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.位图, 内容差异长度低, 比如性别,比如民族

你可能感兴趣的:(oracle)