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;