Oracle基础部分三(视图、物化视图、序列、同义词、索引)

news/2024/11/8 6:07:41/

Oracle基础部分三(视图、物化视图、序列、索引)

  • 1 视图
    • 1.1概述
    • 1.2 创建普通视图
      • 1.2.1 创建普通视图
      • 1.2.2 创建带检查约束的视图
      • 1.2.3 创建只读视图的创建与使用
      • 1.2.4 强制创建视图
      • 1.2.5 创建复杂视图
        • 1.2.5.1 多表关联
        • 1.2.5.2 分组聚合统计的复杂视图
    • 1.3 创建物化视图
      • 1.3.1 语法
      • 1.3.2 示例
        • 1.3.2.1 创建手动刷新的物化视图
        • 1.3.2.2 创建自动刷新的物化视图
        • 1.3.2.3 创建不生成数据的物化视图
        • 1.3.2.4 创建增量刷新的物化视图
        • 1.3.2.5 执行物化视图的手动刷新
    • 1.4 查询视图
      • 1.4.1 语法
      • 1.4.2 示例
    • 1.5 修改视图数据
      • 1.5.1 语法
      • 1.5.2 示例
  • 2 序列
    • 2.1 语法
    • 2.2 创建序列
      • 2.2.1 创建普通序列
      • 2.2.2 创建复杂序列
        • 2.2.2.1 创建有最大值的非循环序列
        • 2.2.2.2 创建有开始值和最大值的非循环序列
        • 2.2.2.3 创建有开始值和最大值的循环序列
    • 2.3 修改序列
      • 2.3.1 语法
      • 2.3.2 示例
    • 2.4 删除序列
      • 2.4.1 语法
      • 2.4.1 示例
  • 3 同义词
    • 3.1 创建同义词
      • 3.1.1 语法
      • 3.1.1 创建示例
        • 3.1.1.1 创建私有同义词
        • 3.1.1.1 创建共有同义词
  • 4 索引
    • 4.1 概述
    • 4.2 创建索引语法
      • 4.2.1 创建普通索引
      • 4.2.2 创建唯一索引
      • 4.2.3 创建复合索引
      • 4.2.4 创建反向键索引
      • 4.2.4 创建位图索引
    • 4.3 创建索引示例
      • 4.3.1 创建普通索引
      • 4.3.2 创建唯一索引
      • 4.3.3 创建复合索引
      • 4.3.4 创建位图索引

1 视图

1.1概述

视图定义:
视图优点:
1.简化数据操作:视图可以简化用户处理数据的方式
2.着重于特定数据:不必要的数据或敏感数据可以不出现在视图中
3.视图提供一个简单而有效的安全机制,可以定制不同用户对数据的访问权限
4.提供向后兼容性:视图使用户能够在表的架构更改时为表创建向后兼容接口

1.2 创建普通视图

CREATE [OR PEPLACE] [FORCE] VIEW view_name
AS subquery
[WITH CHECK OPTION]
[WITH READ ONLY]

解释:
OR REPLACE:若所创建的视图已经存在,ORACLE自动重建改视图
FORCE:不管基表是否存在ORACLE都会自动创建该视图
subquery:一条完整的SELECT语句,可以在该语句中定义别名
WITH CHECK OPTION:插入或修改的数据必须满足视图定义的约束
WITH READ ONLY:该视图不能执行任何DML操作

1.2.1 创建普通视图

create view view_owners1 as
select * from t_owners where ownertypeid = 1

1.2.2 创建带检查约束的视图

create view view_address2 as
select * from t_address where areaid = 2
with check option

1.2.3 创建只读视图的创建与使用

create or replace view view_owners1 as
select * from t_owners where ownertypeid = 1
with read only

1.2.4 强制创建视图

create force view view_test as  -- view_test不存在
select * from t_test

1.2.5 创建复杂视图

1.2.5.1 多表关联

create or replace view view_owners as 
select ow.id 业主编号, ow.name 业主名称,ot.name 业主类型  from t_owners ow, t_ownertype ot
where ow.ownertypeid = ot.id

1.2.5.2 分组聚合统计的复杂视图

create view view_accountsum as
select year,month,sum(money) money from t_account
group by year,month
order by year,month

1.3 创建物化视图

1.3.1 语法

CREATE METERIALIZED VIEW view_name 
[BUILD IMMEDIATE | BUILD DEFERRED]
REFRESH [FAST|COMPLETE|FORCE]
[
ON  [COMMIT | DEMAND] | START WITH [start_time] NEXT(next_time) 
]
as

解释:
BUILD IMMEDIATE 是在创建物化视图的时候就生成数据(默认)
BUILD DEFERRED 则在创建时不生成数据,以后根据需要再生成数据

COMPLETE 完全
FAST 增量更新
FORCE 自动(默认)

ON COMMIT 在基表做提交操作时刷新物化视图
ON DEMAND 手动刷新(默认)

1.3.2 示例

1.3.2.1 创建手动刷新的物化视图

create materialized view mv_address1 
as
select ad.id, ad.name, ar.name arname  from t_address ad, t_area ar
where ad.areaid = ar.id

1.3.2.2 创建自动刷新的物化视图

create materialized view mv_address2
refresh COMPLETE
on commit  -- 自动刷新
as
select ad.id, ad.name, ar.name arname  from t_address ad, t_area ar
where ad.areaid = ar.id

1.3.2.3 创建不生成数据的物化视图

create materialized view mv_address3
build deferred  -- 创建不产生数据
refresh
on commit
as
select ad.id, ad.name, ar.name arname  from t_address ad, t_area ar
where ad.areaid = ar.id

注意:第一次 必须需要手动刷新,才能查看到数据

1.3.2.4 创建增量刷新的物化视图

注意:前提是必须创建物化视图日志:基表发生了哪些变化,用这些记录去更新物化视图

第一步:创建物化视图日志

create materialized view log on t_address with rowid
create materialized view log on t_area with rowid

第二步:创建增量刷新的物化视图
注意:创建增量刷新的物化视图中的语句中,必须有基表的ROWID,通过ROWID查询关联

create materialized view mv_address4
refresh fast
as
select ad.rowid adrowid,ar.rowid arrowid,ad.id, ad.name, ar.name arname  from t_address ad, t_area ar
where ad.areaid = ar.id

1.3.2.5 执行物化视图的手动刷新

语法:

beginDBMS_MVIEW.refresh('视图','C');
end;

示例:

beginDBMS_MVIEW.refresh('mv_address1','c');
end;

1.4 查询视图

1.4.1 语法

select * from 视图名称 where 条件

1.4.2 示例

select * from view_owners1  where addressid = 1

1.5 修改视图数据

1.5.1 语法

update 视图 set 字段 =where 条件

1.5.2 示例

update view_owners1 set name = '范小冰' where id = 1

注意:1、只读视图不能修改;2、修改带检查约束的视图,检查约束不能修改;3、对于复杂视图,只能修改键保留表里面的数据,对于分组聚合统计的复杂视图不能修改,没有键保留表

-- 无法修改成功的语句,因为该视图的条件时 areaid = 2
update view_address2 set areaid = 3 where id =4

2 序列

2.1 语法

CREATE SEQUENCE sequence //创建序列名称
[INCREMENT BY n] //递增的序列值是n 如果n是正数就递增如果是负数就递减 默
认是1
[START WITH n] 1/开始的值,递增默认是 minvalue 递减是 maxvalue
[MAXVALUE n|NOMAXVALUE)] //最大值
[(MINVALUE n|NOMINVALUE)//最小值
KCYCLE|NOCYCLE]] //循环/不循环(默认不循环)
[(CACHE n|NOCACHE)];//分配并存入到内存中(默认缓存20个)

2.2 创建序列

2.2.1 创建普通序列

create sequence seq_test

2.2.2 创建复杂序列

2.2.2.1 创建有最大值的非循环序列

create sequence seq_test1
maxvalue 20;

2.2.2.2 创建有开始值和最大值的非循环序列

create sequence seq_test2
increment by 10
start with 10
maxvalue 100

2.2.2.3 创建有开始值和最大值的循环序列

create sequence seq_test3
increment by 10
start with 10
minvalue 10
maxvalue 210
cycle 

2.3 修改序列

2.3.1 语法

ALTER SEQUENCE 序列名称 修改的需求参数

2.3.2 示例

ALTER SEQUENCE seq_test MAXVALUE 5000 CYCLE

2.4 删除序列

2.4.1 语法

drop SEQUENCE 序列名称

2.4.1 示例

drop sequence seq_test5

3 同义词

3.1 创建同义词

同义词相当于别名

3.1.1 语法

create [public] SYNONYM synooym for objec

解释:其中synonym表示要创建的同义词的名称,object表示表,视图,序列

3.1.1 创建示例

3.1.1.1 创建私有同义词

私有同义词只有此用户才能使用

create synonym owners for t_owners

3.1.1.1 创建共有同义词

共有同义词所有用户都能够使用

create public synonym owners2 for t_owners

4 索引

4.1 概述

1)索引是什么?
(1) 一种供服务器在表中快速查找一行的 ‘数据库结构’
(2) 可以理解为:一本书中的 ‘目录’
2)索引的优点
(1) 加快数据的 ‘检索速度’
(2) 可以保证列值的 ‘唯一性’(unique、主键)
(3) 实现表与表之间的 ‘参照完整性’(外键)
(4) 在使用 order by、group by 子句时,可以减少排序和分组的时间
3)索引的缺点
(1) 当对表数据进行 DML 操作的时候,索引自动维护,‘降低 DML 操作的速度’
(2) 索引需要占 ‘物理空间’,同数据表的 ‘表空间’ tablespace 一样
(3) 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
4)索引的使用原则
(1) ‘主键’ 和 ‘外键’ 会自动创建索引,无需人工操作
(2) 选择正确的表:经常检索包含大量数据的表中小于 15% 的行
(3) 选择正确的列:多个表之间的关联关系
(4) 合理安排索引列:(A,B,C) A 最常用,B 次之,C 最末

4.2 创建索引语法

4.2.1 创建普通索引

create index 索引名 on 表名(列明)

4.2.2 创建唯一索引

唯一索引:不能重复,主键索引自动创建的唯一索引

create unique index 索引名称 on 表明(列名)

4.2.3 创建复合索引

复合索引:顺序也有要求,按照查询习惯建复合索引

create  index 索引名称 on 表明(列名1, 列明2......)

4.2.4 创建反向键索引

反向键索引:(顺序)10进制 → 二进制 → 反向键 → 十进制(随机数)),层级更均衡
反向键索引优点:
1、使用传统的B-tree索引,当索引的列是按顺序产生时,相应的索引键值会基本分布在同一个叶块中。当用户对该列进行操作时,难免会发生索引块的争用
2、使用反向索引,将索引列的键值进行反转,实现顺序的键值分散到不同的叶块中,从而减少索引块的争用。

create  index 索引名称 on 表明(列名) reverse;

4.2.4 创建位图索引

使用场景:位图索引适合创建在低基数列上
位图索引不直接存储ROWID,而是存储字节位到ROWID的映射
优点:减少响应时间,节省空间占用
位图索引只在使用等于时生效,范围查询时位图索引不生效

create bitmap index 索引名称 on 表明(列名)

4.3 创建索引示例

4.3.1 创建普通索引

create index index_owners_name on t_owners(name);

4.3.2 创建唯一索引

create unique index index_owners_meter on t_owners(watermeter);

4.3.3 创建复合索引

create index index_owners_ah on t_owners(addressid,housenumber);

4.3.4 创建位图索引

create bitmap index index_owners_typeid on t_owners(ownertypeid)

http://www.ppmy.cn/news/45954.html

相关文章

Javascript进阶专题总结(函数、异步编程、设计模式)

函数式编程什么时候用 编程方法:函数式(js),面向对象(java,c),命令式 函数式(工具式操作) 优点:JavaScript种函数是一等公民,便于拆分组合可扩展性好,方便tree-shaking 缺点&…

在没有魔法的情况下,如果让ChatGPT帮我们写代码

ChatGPT写代码 ✋ChatGPT 是一个基于人工智能的自然语言处理模型,可以帮助程序员更高效地、更自然地与计算机交互。ChatGPT 可以解决程序员在日常开发中遇到的各种问题,例如语法错误、API 使用、代码实现、架构设计等等。 💥通过与 ChatGPT…

scipy.signal.welch参数详解

scipy.signal.welch: def welch(x, fs1.0, windowhann, npersegNone, noverlapNone, nfftNone,detrendconstant, return_onesidedTrue, scalingdensity,axis-1, averagemean) x传入的信号数据。fs是信号的采集频率,即1s采集多少次,默认为1.0。window窗函…

asp.net车辆管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net车辆管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net车辆管理系统VS开发sqlserver数…

现在学习云计算,还有出路吗?

现在学习云计算,还有出路吗? 当然有出路,现在正是学习云计算的好时机。只要你专业技术过关,有一定的项目经验,有的企业甚至接受应届生;其次是具备一定的职业素养,学历在大专及以上,年…

RK3399平台开发系列讲解(基础篇)ADC 使用方法

🚀返回专栏总目录 文章目录 一、ADC 的 DTS 配置二、ADC 驱动说明2.1、获取 AD 通道2.2、读取 AD 采集到的原始数据2.3、计算采集到的电压三、接口说明沉淀、分享、成长,让自己和他人都能有所收获!😄 📢内核采用工业 I/O 子系统来控制 ADC,该子系统主要为 AD 转换或者…

太阳能电池板AI视觉检测:不良品全程阻断,高效助力光伏扩产

2022年,面对复杂严峻的国内外形势,我国光伏行业依然实现高速增长,多晶硅、硅片、电池片、组件产量稳居全球首位。2023年以来,扩产项目已多点开花。光伏装机量天花板将不断提升,分布式电站占比也将逐年上升。中国光伏行…

arcgis中地理配准之栅格平移

背景 前面写过一篇文章,是针对有两个对应的栅格数据进行配准的 Arcgis地理配准栅格数据 有时候需要没有对应的栅格数据,只有单幅栅格数据,而且知道平移参数,这时候可以通过平移参数来平移栅格,而且在unity中不能直接识别坐标值很大的数据,只能通过平移将坐标值减少,才…