欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

11.创建其他方案对象——Oracle数据库学习日记

程序员文章站 2022-06-02 19:07:49
...

创建其他方案对象

数据库对象

Object Description
Table 基本的数据存储集合,由行和列组成
View 从一张表或多张表中抽出的逻辑上相关的数据集合
Sequence 生成规律的数值
Index 提高查询性能
Synonym 给对象起的别名

1、视图View

优点

  • 限制数据访问
  • 简化查询
  • 数据独立性
  • 避免重复访问相同的数据

简单视图和复杂视图

特点 简单视图 复杂视图
表的数量 One One or more
包含函数 No Yes
包含分组数据 No Yes
通过视图做DML操作 Yes Not always

1.1创建视图

  • CREATE VIEW子句中嵌入子查询
CREATE [OR REPLACE] [FORCE|<u>NOFORCE</u>] VIEW  view
    [(alias[,alias]...)]
  AS subquery
  [WITH CHECK OPTION [CONSTRAINT constraint]]
  [WITH READ ONLY [CONSTRAINT constraint]];

示例

CREATE VIEW empvu80
AS SELECT employee_id,last_name,salary
    FROM employees
    WHERE department_id=80;     # 创建视图EMPVU80,包含部门为80的员工详细信息

DESCRIBE empvu80        # 描述视图结构

SELECT *
FROM empvu80;       # 从视图中检索数据

1.2修改视图

使用CREATE OR REPLACE VIEW字句修改视图

CREATE OR REPLACE VIEW emvu80
    (id_number,name,sal,department_id)
  AS SELECT employee_id,fierst_name|| ' '||last_name,salary,department_id
  FROM employees
  WHERE department_id=80;

视图上执行DML操作的规则–DELETE

  • 可以在简单视图上执行DML操作
  • 当视图定义中包含一下元素之一时不能删除行
    • 组函数
    • GROUP BY 子句
    • DISTINCT关键字
    • ROWNUM伪列

视图上执行DML操作的原则–UPDATE

  • 当视图定义中包含以下元素之一时不能修改数据
    • 组函数
    • GROUP BY 子句
    • DISTINCT关键字
    • ROWNUM伪列
    • 表达式定义的列

视图上执行DML操作的原则–INSERT

  • 当视图定义中包含以下元素之一时不能插入数据
    • 组函数
    • GROUP BY 子句
    • DISTINCT关键字
    • ROWNUM伪列
    • 表达式定义的列
    • 表中非空的列在视图定义中未包括

可以使用WITH READ ONLY选项屏蔽对视图的DML操作,任何DML操作都会返回一个Oracle server错误

1.3删除视图

删除视图只是删除视图的定义,并不会删除基表的数据

DROP VIEW view;
示例
DROP VIEW empvu80;

2、序列

  • 自动提供唯一的数值
  • 共享对象
  • 主要用于提供主键值
  • 可代替应用程序生成序号
  • 将序列值缓存到内存中,可以提高访问效率
    语法
CREATE SEQUENCE sequence
        [INCREMENT BY n]
        [START WITH n]
        [{MAXVALUE n | NOMAXVALUE}]
        [{MINVALUE n | NOMINVALUE}]
        [{CYCLE | NOCYCLE}]
        [{CACHE N | NOCACHE}];

2.1创建序列

CREATE SEQUENCE dept_deptid_seq
                        INCREMENT BY 10
                        START WITH 120
                        MAXVALUE 9999
                        NOCACHE
                        NOCYCLE;

2.2NEXTVAL和CURRVAL伪列

  • NEXTVAL返回下一个可用的序列值。它返回一个唯一的值每次引用它的时候,任何用户都可以引用它
  • CURRVAL得到当前的序列值
  • 使用CURRVAL之前必须发出NEXTVAL

2.3使用序列

插入一个新的部门为“Support”位置为ID为2500
INSERT INTO departments(department_id,
                department_name,location_id)
 VALUES     (dept_deptid_seq.NEXTVAL,
                'Support',2500);
                
序列DEPT_DEPTID_SED显示当前值
SELECT dept_deptid_seq.CURRVAL
FROM dual;

2.4缓存序列值

  • 将序列值缓存到内存中,可提高访问效率
  • 序列在下列情况下出现“断号”:
    • 发生回滚
    • 系统崩溃
    • 序列用于其他的表

2.5修改序列

  • 可以修改序列的增量、最大值、最小值,循环选项或缓存
    示例
ALTER SEQUENCE dept_deptid_seq
                        INCREMENT BY 20
                        MAXVALUE 999999
                        NOCACHE
                        NOCYCLE

注意事项:

  • 必须是序列的拥有者或对序列有ALTER权限
  • 只有将来的序列值会被改变
  • 改变序列的初始值只能通过删除序列之后重建序列的方法实现
  • 使用DROP语句删除序列:
DROP SEQUENCE dept_deptid_seq;

3、创建对象的同义词

通过创建同义词简化对象访问(一个对象的另一个名字),使用同义词您可以:

  • 方便访问其他用户的对象
  • 缩短对象名字的长度
CREATE [PUBLIC] SYNONYM synonym
FOR object;

为视图DEPT_SUM_VU创建一个较短名称的同义词:
CREATE SYNONYM d_sum
FOR dept_sum_vu;

删除同义词:
DROP SYNONYM d_sum;