• oracle学习笔记(十四) 数据库对象 索引 视图 序列 同义词


    数据库对象

    用户模式:指数据库用户所创建和存储数据对象的统称。在访问其它用户模式的数据库对象时需加上用户模式。
    如:scott.emp, scott.dept等。
    数据库对象包括:表、视图、索引、序列、目录、同义词、数据库用户、存储过程、函数、触发器等。

    同义词

    同义词是现有数据库对象的一个别名。

    1. 简化SQL语句
    2. 隐藏对象的名称和所有者

    同义词分为私有和公有的

    --创建同义词得通过sys进行授权
    grant create [any] synonym to $username$; --授权,创建私有同义词
    grant create public synonym to $username$;--授权,创建公有同义词

    私有:只有当前用户才能使用

    --创建私有同义词
    create [or replace] synonym 同义词名称 for 对象(如:表,视图等); 
    drop synonym  $同义词名$; --删除同义词
    
    create or replace synonym emp for employee;

    公有:全部的用户都能使用

    --创建公有同义词
    create [or replace] public synonym 同义词名称 for 对象(如:表);
    drop public synonym $同义词名$;--删除同义词
    
    create or replace public synonym emp for employee;

    序列

    序列是用于生成唯一、连续序号的对象,如:1,2,3.......
    作用:
    序列常用于生成表的主键值、唯一键的值以及需要连续序号的场合。
    补充:
    序列可以是升序的,也可以是降序的。
    一个序列产生的值可以同时供多个表使用,如果有这个需要的话。
    创建序列:

    --语法
    CREATE sequence序列名
      START WITH 初始值 
      【INCREMNT BY 步长】 --步长为负数,则是降序
      【MAXVALUE  最大值】 
      【MINVALUE 最小值】
      【CYCLE/NOCYCLE】
      【CACHE/NOCACH】默认oracle缓存20个序列值
    create sequence emp_seq
    start with 1;
    
    select emp_seq.nextval from dual;
    --先执行,序列才会有数据,从1开始,步长默认为1,执行一次,序列的当前数值就会自加1
    
    slect emp_seq.currval from dual;--返回当前的数值
    
    --创建序列
    create sequence emp_seq 
    start with 8001; --没加increment by 默认步长为1
    
    --最初创建序列时初始值是没有的,第一次访问序列必须先访问它的nextval属性
    select emp_seq.nextval from dual;
    select emp_seq.nextval,emp_seq.currval from dual;
    
    --修改序列,不能修改初始值(start with x)
    select max(empno) from emp;
    
    --删除序列
    drop sequence emp_seq;
    
    --在插入时使用序列来生成主键值
    insert into employee(empno,ename,job,sal) values(emp_seq.NEXTVAL, 'james','CLERK',3999);
    
    --生成序列的下一个值
    select emp_seq.nextval from dual;
    
    --访问序列的当前值
    select 'XYZ-'||emp_seq.currval from dual;

    视图

    视图,被称为虚拟表,可以简化select语句
    作用:

    • 提供了另外一种级别的表安全性
    • 隐藏的数据的复杂性
    • 简化的用户的SQL语句
    • 隔离基表(创建视图时用到的表)结构的改变
    • 通过重命名列,从另一个角度提供数据
    • 数据独立性

    和之前的序列一样,需要sys进行授权

    grant create view to $username$
    --相当于复制一个表
    create view emp_view as select * from employee
    --隐藏了其他的属性,只显示员工编号,姓名以及部门
    create view emp_view as select empno,ename,deptno from employee
    --复杂查询的结果当成一个表
    --列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,和工资等级
    --如果需要使用当前的结果,使用select语句就简单许多
    create or replace view emp_sal_vw
    as 
      select e.empno,
        e.ename,
        d.dname dept_name,
        m.empno as mgrNo,
        m.ename as manager,
        s.grade
      from employee e,
           employee m, 
           department d,
           salgrade s
      where e.mgr=m.empno(+)
        AND e.deptno=d.deptno
        AND e.sal>(select avg(sal) from employee)
        AND e.sal BETWEEN s.losal AND s.hisal; 

    索引

    查询时候数据量大的时候,通过索引可以提高查询的效率(百万条数据级别),在常用的列名(字段)创建索引

    --创建索引
    create [unique] index $indexName$ on $tablename$(列名1,列名2...) 

    唯一索引和普通索引

    索引有唯一索引和普通索引,如在多个列上创建索引则成为组合索引
    唯一索引一般在创表的时候,把某列设置某个主键,系统就会自动为该列创建唯一索引

    --普通索引
    create index hiredate_idx on employee(hiredate);
    --组合索引
    create index emp_comp on employee(mgr,deptno);
    --组合索引的顺序可以是任意的,不过,此顺序会影响查询的时候是否会启用索引查询
    
    --下面两条是会启用索进行查询
    select mgr,deptno from employee;
    select mgr from employee;
    
    --下面两条是会不会启用索进行查询
    select deptno from employee;
    select deptno,mgr from employee;

    函数索引

    create index emp_job_fun on employee(lower(job));
    
    --不启用索引查询
    select * from employee where job='CLERK';
    
    --启用索引查询
    select * from employee where lower(job)='clerk';
  • 相关阅读:
    微信小程序获取用户绑定手机号码完整版
    SQL读取当天的数据
    Android 百度离线地图(由apk文件转入手机内部存储)
    解决windows家庭版系统不支持远程桌面功能问题
    微信小程序携参跳转页面
    微信小程序 websocket 封装
    微信小程序HTTP请求封装
    Ionic项目打包Android在9版本以上不能进行HTTP通信问题
    Ionic 使用 MQTT
    Ionic HTTP 请求
  • 原文地址:https://www.cnblogs.com/chaoyang123/p/11549419.html
Copyright © 2020-2023  润新知