A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小鲁哥哥 于 2017-6-4 14:39 编辑

【济南中心】JavaEE就业班同步笔记第二阶段:
Oracle-part03

第一节
1.1 视图概述
1.2.1知识概述
1、简介
视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表。视图是存储在数据字典里的一条select语句。 通过创建视图可以提取数据的逻辑上的集合或组合。
2、优点:
简化数据操作:视图可以简化用户处理的方式;
着重于特定数据:不必要的或敏感的数据可以不出现在视图中;
视图提供了一个简单而有效的安全机制(只读),可以定制不同用户对数据访问;
提供向后兼容性:视图使用户能够在表的结构构更改时为表创建向后兼容接口。
对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。
用户通过简单的查询可以从复杂查询中得到结果。
维护数据的独立性,试图可从多个表检索数据。
对于相同的数据可产生不同的视图。
注意:视图不能提高性能
1.3 创建、修改、删除视图的语法
1.3.1 知识概述
1、创建和修改视图
CREATE [OR REPLACE] [FORCE] VIEW view_name   
AS subquery  
[WITH CHECK OPTION ]  
[WITH READ ONLY]
OR REPLACE:如果视图已存在,则重新创建视图,相当于修改视图;
FORCE:不管基表是否存在,都会创建视图;
subquery  :select 查询语句(可以是单表,可以使多表,可以包含子查询);
WITH CHECK OPTION:插入或修改的数据必须满足视图定义的约束;
WITH READ ONLY:该视图只能查询,不能修改或者插入数据。
2、删除视图
DROP VIEW view_name
1.4 视图-简单视图
1.4.1 知识概述
简单视图:subquery子句是一个单表查询语句。
创建:
CREATE OR REPLACE VIEW VIEW_OWNERS
AS SELECT * FROM T_OWNERS WHERE OWNERTYPEID=1;
查询视图数据:SELECT * FROM VIEW_OWNERS [WHERE OWNERTYPEID=1];
修改视图数据:UPDATE VIEW_OWNERS SET NAME=’Oracle’ WHERE ID=2;
删除视图数据:  DELETE FROM VIEW_OWNERS WHERE ID=2;
注意:不建议在视图上插入、修改、删除数据
1.5 视图-带检查约束的视图
1.5.1 知识概述
带检查约束的视图:使用WITH CHECK OPTION关键字,
create or replace view view_address2 as
select * from T_ADDRESS where areaid=2
with check option;
使用[WITH CHECK OPTION]关键字后,在插入、修改数据时会检查是否满足subquery子句中的where条件,只有满足才能执行保存到数据库中。

第二节
2.1 视图-只读视图
2.1.1知识概述
使用关键字WITH READ ONLY,此时只能查询视图中的数据,不能插入、修改和删除操作。
2.2 视图-带错误的视图
2.2.1知识概述
使用关键字FORCE,意思是强制执行创建视图的语句,忽略表不存在的错误
2.3 视图-多表关联的视图
2.3.1知识概述
2.3.1.1 创建
其中的subquery子句是一个多表关联的select查询语句。
2.3.1.2 键保留表
官方介绍:
A table is key preserved if every key of  the table can also be a key of the result of the join.
It is not necessary that the key or keys of a table be selected for it to be key preserved.
It is sufficient that if the key or keys were selected, then they would also be key(s) of the result of the join.
键保留表的理解是:
一个复杂视图,若需要出现键保留表的话则必须保证基表中至少有一张表是有主键的!(如果两个没有主键表进行关联时是不会出现键保留表的;另外如果视图中有一张基表具有主键,就一定会出现另一张基表成为键保留表的现象)
     其次,这两张表在进行关联时(可以是表连接也可以是多表查询,但一定要有关联条件,其关联条件其实相当于两表的主外键关系),如果关联条件是使用了主键的话,则外键表为键保留表。
2.4 视图案例-聚合统计的视图
2.4.1 知识概述
该类型的subquery子句是一个分组统计或者排序的select查询语句
2.5 物化视图-概述和语法
2.5.1 知识概述
2.5.1.1 概述


与视图的区别是


2.5.1.2 语法
BUILD IMMEDIATE 是在创建物化视图的时候就生成数据
BUILD DEFERRED  则在创建时不生成数据,以后根据需要再生成数据。 默认为BUILD IMMEDIATE。
REFRESH方式:指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。
FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。
COMPLETE刷新对整个物化视图进行完全的刷新。
FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。FORCE是默认的方式。
    刷新的模式有两种:ON DEMAND和ON COMMIT。ON DEMAND指需要手动刷新物化视图(默认)。ON COMMIT 指在基表发生COMMIT操作时自动刷新

第三节    
3.1 物化视图-手动刷新的物化视图
3.1.1知识概述
创建视图:

3.2 视图案例-自动刷新的视图
Refresh on commit 在数据提交时刷新物化视图
3.3 物化视图-创建时不生成数据
3.3.1知识概述
创建时不生成数据,在数据提交时会刷新物化视图,也可以手动刷新
3.4 物化视图-增量刷新物化视图
3.4.1 知识概述
3.4.1.1 创建增量刷新的物化视图
1、创建物化视图日志
创建出来的日志的名称为【mlog$_表名称】
2、创建物化视图

注意:创建增量刷新的物化视图,必须:
1. 创建物化视图中涉及表的物化视图日志。
2. 在查询语句中,必须包含所有表的rowid ( 以rowid方式建立物化视图日志 )
3.4.1.2 物化视图日志

SNAPTIME$$:用于表示刷新时间。
DMLTYPE$$:用于表示DML操作类型,I表示INSERT,D表示DELETE,U表示UPDATE。
OLD_NEW$$:用于表示这个值是新值还是旧值。N(EW)表示新值,O(LD)表示旧值,U表示UPDATE操作。
CHANGE_VECTOR$$:表示修改矢量,用来表示被修改的是哪个或哪几个字段。
此列是RAW类型,其实Oracle采用的方式就是用每个BIT位去映射一个列。
插入操作显示为:FE, 删除显示为:OO更新操作则根据更新字段的位置而显示不同的值。

第四节
4.1 序列概述
4.1.1知识概述
序列是oacle提供的用于产生一系列唯一数字的数据库对象。序列的用途一般用来填充主键和计数。
简单的序列
4.2 序列-语法
4.2.1知识概述

4.3 创建、修改、删除序列
4.3.1知识概述
1、有最大值的非循环序列
注意:起始值不能比最小值小
2、有最大值的循环序列
注意:循环序列必须指定最大值
3、带缓存的序列
注意:设置缓存的值必须小于循环的值的个数
修改和删除序列

第五节
5.1 同义词概述和语法
5.1.1知识概述
5.1.1.1 概述
从字面上理解就是别名的意思,和试图的功能类似。就是一种映射关系。
Oracle数据库中提供了同义词管理的功能。同义词是数据库方案对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在使用同义词时,Oracle数据库将它翻译成对应方案对象的名字。与视图类似,同义词并不占用实际存储空间,只有在数据字典中保存了同义词的定义。在Oracle数据库中的大部分数据库对象,如表、视图、同义词、序列、存储过程、包等等,数据库管理员都可以根据实际情况为他们定义同义词。
5.1.1.2 语法
create synonym 名字 for
表/视图/序列;
同义词的类型:共有和私有;如果使用了public关键字则为公有同义词,任何用户都可以访问,否则只有同义词的创建之才能访问。
Object包含表、视图、序列
5.2 创建同义词
5.2.1知识概述
私有同义词:
create sysnonym 名字 for 表/视图/序列;
共有同义词:

create public sysnonym 名字 for 表/视图/序列;
5.3 索引-概述
5.3.1知识概述
索引是用于加速数据存取的数据对象。合理的使用索引可以大大降低i/o 次数,从而提高数据访问性能。
索引是需要占据存储空间的,也可以理解为是一种特殊的数据。形式类似于下图的一棵“树”,而树的节点存储的就是每条记录的物理地址,也就是我们提到的伪列(ROWID)。
5.4 索引-普通索引
5.4.1 知识概述
语法:
create index 名称 on 表名(列名)
性能测试:

上图可以明显看出name查询占用资源比id查询要少很多。
查询的时间也可以看出来使用索引列查询效率高。
5.4.3 总结与补充
    不适合创建index的情况:表很小,数据经常被修改,列很少作为查询条件

第六节
6.1 索引-唯一索引和复合索引
6.1.1 知识概述
6.1.1.1 唯一索引
概述

语法
create uniqune index 名称 on 表名(列名)
6.1.1.2 复合索引
概述:
基于两个以上的列建立一个索引 。
语法:

create uniqune index 名称 on 表名(列名,列名...)
6.2 索引-反向键索引
6.2.1 知识概述

语法:
create index 名称 on 表名(列名) reverse
6.3 索引-位图索引
6.3.1 知识概述

优点:减少响应时间,节省空间占用。
语法
create bitmap index 名称 on 表名(列名)
6.4 今日总结
6.4.1 知识概述
1、视图
2、物化视图
3、序列
4、同义词
5、索引



04.png (8.22 KB, 下载次数: 12)

04.png

3 个回复

倒序浏览

回帖奖励 +1

厉害了我的哥
回复 使用道具 举报

回帖奖励 +1

好多内容啊
回复 使用道具 举报

回帖奖励 +1

楼主最好人
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马