• oracle 10g 学习之视图、序列、索引、同义词(9)


    目标

    通过本章学习,您将可以:

    l  描述视图

    l  创建和修改视图的定义,删除视图

    l  从视图中查询数据

    l  通过视图插入, 修改和删除数据

    l  使用“Top-N” 分析

    l  创建, 维护, 和使用序列

    l  创建和维护索引

    l  创建同义词

    视图描述

    l  视图是一种虚表.

    l  视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。

    l  向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句.

    l  视图向用户提供基表数据的另一种表现形式

    为什么使用视图

    l  控制数据访问

    l  简化查询

    l  避免重复访问相同的数据

    创建视图

    CREATE VIEW          empvu80

     AS SELECT  employee_id, last_name, salary

        FROM    employees

        WHERE   department_id = 80;

    修改视图

    CREATE OR REPLACE VIEW empvu80

      (id_number, name, sal, department_id)

    AS SELECT  employee_id, first_name || ' ' || last_name,

               salary, department_id

       FROM    employees

       WHERE   department_id = 80;

    屏蔽 DML 操作

    l  可以使用 WITH READ ONLY 选项屏蔽对视图的DML 操作

    l  任何 DML 操作都会返回一个Oracle server 错误

    CREATE OR REPLACE VIEW empvu10

        (employee_number, employee_name, job_title)

    AS SELECT         employee_id, last_name, job_id

       FROM     employees

       WHERE    department_id = 10

       WITH READ ONLY;

    Top-N 分析

    查询工资最高的三名员工:

    SELECT ROWNUM as RANK, last_name, salary

    FROM  (SELECT last_name,salary FROM employees

           ORDER BY salary DESC)

    WHERE ROWNUM <= 3;

    rownum“伪列”,数据表本身并没有这样的列,是oracle数据库为每个数据表“加上的”列,可以标识行号,默认情况下rownum按主索引来排序,若没有主索引则自然排序。

    注意:对rownum只能使用<或<=,,而用=,>,>=都将不能返回任何数据。

    使用rownum进行分页

       select * from (

                       select rownum rn,e.*,from employees e

    )

    where rn>=(pageNum-1)*pageSize+1 and rn<=pageNum*pageSize

    什么是序列?

    序列: 可供多个用户用来产生唯一数值的数据库对象

    l  自动提供唯一的数值

    l  共享对象

    l  主要用于提供主键值

    l  将序列值装入内存可以提高访问效率

    定义序列:

    CREATE SEQUENCE sequence

           [INCREMENT BY n]

           [START WITH n]

           [{MAXVALUE n | NOMAXVALUE}]

           [{MINVALUE n | NOMINVALUE}]

           [{CYCLE | NOCYCLE}]

           [{CACHE n | NOCACHE}];

    比如:

    CREATE SEQUENCE dept_deptid_seq

                    INCREMENT BY 10

                    START WITH 120

                    MAXVALUE 9999

                    NOCACHE

                    NOCYCLE;

    查询序列

    l  查询数据字典视图 USER_SEQUENCES 获取序列定义信息

    SELECT      sequence_name, min_value, max_value,

    increment_by, last_number

    FROM        user_sequences;

    NEXTVAL 和 CURRVAL 伪列

    l  NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用

    l  CURRVAL 中存放序列的当前值

    l  NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效

    select dept_deptid_seq.nextval from dual;

    SELECT      dept_deptid_seq.CURRVAL

    FROM        dual;

    序列应用:

    INSERT INTO departments(department_id,

                department_name, location_id)

    VALUES      (dept_deptid_seq.NEXTVAL, //自增列

                'Support', 2500);

    修改序列

    ALTER SEQUENCE dept_deptid_seq

                   INCREMENT BY 20

                   MAXVALUE 999999

                   NOCACHE

                   NOCYCLE;

    删除序列

    DROP SEQUENCE dept_deptid_seq;

    索引

    l  一种独立于表的模式对象, 可以存储在与表不同的磁盘或表空间中

    l  索引被删除或损坏, 不会对表产生影响, 其影响的只是查询的速度

    l  索引一旦建立, Oracle 管理系统会对其进行自动维护, 而且由 Oracle 管理系统决定何时使用索引. 用户不用在查询语句中指定使用哪个索引

    l  在删除一个表时, 所有基于该表的索引会自动被删除

    l  通过指针加速 Oracle 服务器的查询速度

    l  通过快速定位数据的方法,减少磁盘 I/O

    创建索引

    CREATE INDEX         emp_last_name_idx

    ON            employees(last_name);

    什么时候创建索引

    以下情况可以创建索引:

    l  列中数据值分布范围很广

    l  列经常在 WHERE 子句或连接条件中出现

    l  表经常被访问而且数据量很大 ,访问的数据大概占数据总量的2%到4%

    什么时候不要创建索引

    下列情况不要创建索引:

    l  表很小

    l  列不经常作为连接条件或出现在WHERE子句中

    l  查询的数据大于2%到4%

    l  表经常更新

    删除索引

    DROP INDEX upper_last_name_idx;

    同义词

    使用同义词访问相同的对象:

    l  方便访问其它用户的对象

    l  缩短对象名字的长度

    创建和删除同义词

    CREATE SYNONYM  d_sum

    FOR  dept_sum_vu;

    DROP SYNONYM d_sum;

  • 相关阅读:
    转载: Ubuntu 在命令下,安装中文环境的方法。
    java复制文件范例代码
    Cesium-entiy闪烁范例
    转载:贝塞尔曲线计算公式
    转载: utm坐标和经纬度相互转换
    arcgis 地图如何转到supermap平台
    Linux查看修改文件句柄数
    转载:Linux目录文件的权限查看与修改
    欧拉系统-登陆 SSH 出现 Access Denied 错误
    关于 nodejs sequelize 事务批量拆分
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/3463848.html
Copyright © 2020-2023  润新知