【Oracle】数据库对象

news2024/12/23 13:22:46

一、视图

1、视图概述

视图是一种数据库对象

视图 => 封装sql语句 => 虚拟表

2、视图的优点
  1. 简化操作:视图可以简化用户处理数据的方式。
  2. 着重于特定数据:不必要的数据或敏感数据可以不出现在视图中。
  3. 视图提供了一个简单而有效的安全机制,可以定制不同用户对数据的访问权限。
  4. 提供向后兼容性:视图使用户能够在表的架构更改时为表创建向后兼容接口。
3、视图的创建与修改
CREATE [OR REPLACE] [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 操作
4、视图的删除
DROP VIEW view_name
5、案例
1)简单视图

简单视图:视图中的语句只是单表查询,并且没有聚合函数

-- 创建简单视图
CREATE VIEW view_owners1 AS
SELECT * FROM T_OWNERS WHERE ownertypeid=1

-- 查询
select * from view_owners1 where addressid=1

-- 更新
update view_owners1 set name='王刚' where id=2

视图其实是一个虚拟的表,它的数据其实来自于表。

如果更改了视图的数据,表的数据也自然会变化,更改了表的数据,视图也自然会变化。

一个视图所存储的并不是数据,而是一条 SQL语句。

2)带检查约束的视图
create view view_address2 as
select * from T_ADDRESS where areaid=2
with check option
-- 无法修改的条件:因为视图的条件是areaid=2
update view_address2 set areaid=1 where id=4

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3)只读视图
create or replace view view_owners1 as
select * from T_OWNERS where ownertypeid=1
with read only

尝试执行修改操作:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4)带错误的视图

我们创建一个视图,如果视图的 SQL 语句所设计的表并不存在

CREATE FORCE VIEW view_TEMP AS 
SELECT * FROM T_TEMP

用途:表会运行时产生

5)复杂视图
1. 多表关联查询

复杂视图:视图的 SQL 语句中,有聚合函数或多表关联查询

-- 创建复杂视图
CREATE VIEW view_owners AS 
SELECT
	o.id 业主编号,
	o.name 业主名称,
	ot.name 业主类型 
FROM
	T_OWNERS o,
	T_OWNERTYPE ot 
WHERE
	o.ownertypeid = ot.id
	
-- 查询复杂视图
select * from view_owners

-- 修改复杂视图
update view_owners set 业主名称='范小冰' where 业主编号=1;

只能修改**键保留表(主键所在的那个表)**的数据

2. 分组聚合统计查询
-- 创建视图,按年月统计水费金额
create view view_accountsum as
select year,month,sum(money) moneysum 
from T_ACCOUNT 
group by year,month
order by year,month

此例用到聚合函数,没有键保留表,所以无法执行 update

二、物化视图

1、物化视图概述

物化视图与普通的视图相比的区别是物化视图是建立的副本。

  • 优点:查询效率高
  • 缺点:占用存储空间
2、物化视图创建
CREATE METERIALIZED VIEW view_name
[BUILD IMMEDIATE | BUILD DEFERRED]
REFRESH [FAST|COMPLETE|FORCE] 
[
ON [COMMIT | DEMAND ] | START WITH (start_time) NEXT
(next_time)
]
AS
subquery
  • BUILD IMMEDIATE :在创建物化视图的时候就生成数据
  • BUILD DEFERRED :在创建时不生成数据,以后根据需要再生成数据(默认为BUILD IMMEDIATE
  • REFRESH:刷新,指当基表发生了 DML 操作后,物化视图何时采用哪种方式和基表进行同步
    • FAST增量刷新,通过日志修改
    • COMPLETE完全刷新,每次修改之后重新生成
    • FORCE自动选择,判断是否可以进行快速刷新,如果可以则采用 FAST 方式,否则采用 COMPLETE的方式(FORCE 是默认的方式)
  • 刷新的模式
    • ON DEMAND :需要手动刷新物化视图(默认)
    • ON COMMIT :基表发生 COMMIT 操作时自动刷新
3、物化视图创建
drop materialized view view_address1
4、案例
1)手动刷新
-- 创建手动刷新的物化视图
CREATE MATERIALIZED VIEW mv_address 
AS 
SELECT
	ad.id,
	ad.name ad_name,
	ar.name ar_name 
FROM
	t_address ad,
	t_area ar 
WHERE
	ad.areaid = ar.id
	
-- 查询物化视图
select * from mv_address

手动刷新物化视图

-- 1、PL/SQL
BEGIN
	DBMS_MVIEW.refresh ( 'MV_ADDRESS', 'C' );
END;
### 2、sql命令窗口
EXEC DBMS_MVIEW.refresh('MV_ADDRESS','C');

c:COMPLETE,完全刷新

2)自动刷新
-- 创建自动刷新的物化视图
CREATE MATERIALIZED VIEW mv_address2 
refresh 
ON commit 
AS 
SELECT
	ad.id,
	ad.name ad_name,
	ar.name ar_name 
FROM
	t_address ad,
	t_area ar 
WHERE
	ad.areaid = ar.id
3)不生成数据

第一次必须手动刷新,之后(ON commit)会自动刷新

-- 创建不生成数据的物化视图
CREATE MATERIALIZED VIEW mv_address3 
build deferred
refresh 
ON commit 
AS 
SELECT
    ad.id,
    ad.name ad_name,
    ar.name ar_name 
FROM
	t_address ad,
	t_area ar 
WHERE
	ad.areaid = ar.id;
4)增量刷新

物化视图日志:记录基表发生了哪些变化,用这些记录去更新物化规图

如果创建增量刷新的物化视图,必须首先创建物化视图日志

-- 创建物化视图日志
create materialized view log on t_address with rowid;
create materialized view log on t_area with rowid;

创建的物化视图日志名称为 MLOG$_表名称

CREATE MATERIALIZED VIEW mv_address4 
refresh fast 
AS 
SELECT
	ad.ROWID adrowid,
	ar.ROWID arrowid,
	ad.id,
	ad.name adname,
	ar.name ar_name 
FROM
	t_address ad,
	t_area ar 
WHERE
	ad.areaid = ar.id;

创建增量刷新的物化视图的条件:

  1. 创建物化视图中涉及表的物化视图日志
  2. 在查询语句中,必须包含所有表的 rowid(以 rowid 方式建立物化视图日志)

当我们手动刷新物化视图后,物化视图日志被清空,物化视图更新。

三、序列

1、序列概述

序列是 ORACLE 提供的用于产生一系列唯一数字的数据库对象。

类似于mysql的自动增长

2、简单序列
-- 创建序列
create sequence 序列名称

通过序列的伪列来访问序列的值

  • NEXTVAL:返回序列的下一个值
  • CURRVAL:返回序列的当前值

我们在刚建立序列后,无法提取当前值,只有先提取下一个值时才能再次提取当前值。

-- 提取下一个值
select 序列名称.nextval from dual

-- 提取当前值
select 序列名称.currval from dual
3、复杂序列
-- 创建序列名称
CREATE SEQUENCE sequence
-- 递增的序列值是 n 如果 n 是正数就递增,如果是负数就递减,默认是 1
[INCREMENT BY n]
-- 开始的值,递增默认是 minvalue 递减是 maxvalue
[START WITH n]
-- 最大值
[{MAXVALUE n | NOMAXVALUE}]
-- 最小值
[{MINVALUE n | NOMINVALUE}]
-- 循环/不循环
[{CYCLE | NOCYCLE}]
-- 分配并存入到内存中
[{CACHE n | NOCACHE}];
4、修改序列

修改序列:使用 ALTER SEQUENCE 语句修改序列,不能更改序列的 START

ALTER SEQUENCE 序列名称 MAXVALUE 5000 CYCLE;
5、删除序列
DROP SEQUENCE 序列名称;
6、案例
1)有最大值的非循环序列
create sequence seq_test1 
increment by 10
start with 10
maxvalue 300
minvalue 5;

当序列值为最大值的时候再次提取值,系统会报异常信息。

2)有最大值的循环序列
create sequence seq_test2
increment by 10
start with 10
maxvalue 300
minvalue 5
cycle;

第一次循环是从开始值开始循环,而第二次循环是从最小值开始循环

3)带缓存的序列
create sequence seq_test5
increment by 10
start with 10
maxvalue 500
minvalue 9
cycle
cache 50;

四、同义词

1、同义词概述

指定方案对象的一个别名

2、同义词的创建与使用
create [public] SYNONYM synooym for object;
  • synonym :要创建的同义词的名称
  • object :表,视图,序列等要创建同义词的对象的名称
  • public
    • 私有同义词:只有当前用户能用
    • 公有同义词:所有的用户都可以使用
3、案例
1)私有同义词
-- 创建私有同义词
create synonym OWNERS for T_OWNERS;

-- 使用私有同义词
select * from OWNERS;
2)公有同义词

以另外的用户登陆,也可以使用公有同义词

-- 创建公有同义词
create public synonym OWNERS2 for T_OWNERS;

-- 使用公有同义词
select * from OWNERS2;

五、索引

1、索引概述

相当于书的目录、字典的索引

索引是需要占据存储空间的,也可以理解为是一种特殊的数据。形式类似于一棵"树"。

树的节点存储的就是每条记录的物理地址,也就是我们提到的伪列ROWID

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 优点:查询效率高
  • 缺点:占用存储空间
2、普通索引
create index 索引名称 on 表名(列名);
3、唯一索引

如果索引列的值是不会重复的,可以创建唯一索引。

create unique index 索引名称 on 表名(列名);
4、复合索引

基于两个以上的列建立一个索引

create index 索引名称 on 表名(列名,列名.....);
5、反向键索引

当某个字段的值为连续增长的值,如果构建标准索引,会形成歪脖子树。会增加查询的层数,性能会下降。

建立反向键索引,可以使索引的值变得不规则,从而使索引树能够均匀分布。

create index 索引名称 on 表名(列名) reverse;
6、位图索引

位图索引适合创建在低基数列上 。

位图索引不直接存储 ROWID,而是存储字节位到 ROWID 的映射。

减少响应时间,节省空间占用。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1375919.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 gitee+sphinx+readthedocs 搭建个人博客

给大家安利如何快速搭建个人博客网站! 前言 这是我本地运行的一个使用sphinx构建的博客服务,这些文章,都是用markdown写的。 一直有个想法,就是把自己写的这些文件,搞成一个博客网站,放到网上&#xff0c…

正面PK智驾,华为与博世「硬扛」

12月20日,随着奇瑞星纪元ES的亮相上市,华为与博世,分别作为新旧时代的供应商角色,首次在高阶智驾赛道进行正面PK。 11月28日,奇瑞和华为合作的首款车型智界S7上市,作为星纪元ES的兄弟车型,搭载华…

Jenkins基础篇--凭据(Credential)管理

什么是凭据 Jenkins的Credentials直译为证书、文凭,我们可以理解为它是钥匙,用来做某些事情的认证。 如Jenkins 和 GitLab交互时,需要添加GitLab的API令牌和登录凭证。 如Jenkins 添加从节点时,需要添加从节点的登录凭证或者Je…

Maven和MyBatis框架简单实现数据库交互

MyBatis是一种基于Java语言的持久层框架,它的主要目的是简化与数据库的交互过程。MyBatis通过XML或注解配置来映射Java对象和数据库表之间的关系,并提供了灵活的查询方式和结果集处理机制。MyBatis还提供了事务管理、缓存机制、插件扩展等特性。 使用My…

详细分析Java中的分布式任务调度框架 XXL-Job

目录 前言1. 基本知识2. Demo3. 实战 前言 可视化任务调度 可视化配置 1. 基本知识 在Java中,分布式任务调度框架 XXL-Job 是一个开源的分布式任务调度平台,用于实现分布式系统中的定时任务调度和分布式任务执行。 下面是关于XXL-Job的一些概念、功…

【Docker】概述与安装

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Docker的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一. Docker的概述 1.Docker为什么出现 2…

RabbitMQ入门到实战——高级篇

消息的可靠性 生产者的可靠性(确保消息一定到达MQ) 生产者重连 这⾥除了enabled是false外,其他 initial-interval 等默认都是⼀样的值。 生产者确认 生产者确认代码实现 application中增加配置:(publisher-returns…

【谭浩强C程序设计精讲 7】数据的输入输出

文章目录 3.5 数据的输入输出3.5.1 输入输出举例3.5.2 有关数据输入输出的概念3.5.3 用 printf 函数输出数据1. printf 的一般格式2. 格式字符 3.5.4 用 scanf 函数输入数据1. scanf 函数的一般形式2. scanf 函数中的格式声明3. 使用 scanf 函数时应注意的问题 3.5.5 字符输入输…

Find My游戏手柄|苹果Find My技术与手柄结合,智能防丢,全球定位

游戏手柄是一种常见电子游戏机的部件,通过操纵其按钮等,实现对游戏虚拟角色的控制。随着游戏设备硬件的升级换代,现代游戏手柄又增加了:类比摇杆(方向及视角),扳机键以及HOME菜单键等。现在的游…

货拉拉智能监控实践:如何解决多云架构下的故障应急问题?

一分钟精华速览 在月活超千万的大规模业务背景下,货拉拉遭遇了多云环境下的监控碎片化、规划无序等问题。为了应对这些挑战,货拉拉开发了一站式监控平台——Monitor。该平台的部署有效地实现了对核心应用的监控和报警全覆盖,显著提高了应急响…

Aigtek高压放大器的工作原理和指标应用介绍

高压放大器是一种用于放大高压信号的电子设备,具有高压输出,低噪声,高精度,高稳定性,高可靠性,低功耗,低成本等的优点,所以才被广泛应用在磁场探测、电磁脉冲放大、电磁波放大、电磁…

Zynq 电源

ZYNQ芯片的电源分PS系统部分和PL逻辑部分,两部分的电源分别是独立工作。PS系统部分的电源和PL逻辑部分的电源都有上电顺序,不正常的上电顺序可能会导致ARM系统和FPGA系统无法正常工作。 PS部分的电源有VCCPINT、VCCPAUX、VCCPLL和PS VCCO。 VCCPINT为PS内…

vue3+acro实现日期组件可以直接展示在界面上,不用非得弹框展示

前言: 在很多时候,我们使用日期组件的时候,不希望每次都是点击弹出日期弹框,而是,点击日期弹框直接能展示在界面上,在这里我们介绍下 使用 acro 来更加轻松的实现他的效果。 实现效果: 实现步骤…

安卓Android Studio读写MifareOne M1 IC卡源码

本示例使用的发卡器&#xff1a; https://item.taobao.com/item.htm?id615391857885&spma1z10.5-c-s.w4002-21818769070.11.66af789eLeok2R <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout …

适配 IOS 安全区域

安全区域指的是一个可视窗口范围&#xff0c;处于安全区域的内容不受圆角&#xff08;corners&#xff09;、齐刘海&#xff08;sensor housing&#xff09;、小黑条&#xff08;Home Indicator&#xff09;影响。 造成这个问题的主要原因就是 iphoneX 之后在屏幕上出现了所谓…

Windows和Linux安装jdk

一、Windows安装jdk 1、下载安装包 Jdk官网下载地址&#xff1a;Java Downloads | Oracle 需要登陆Oracle账号信息。 百度网盘下载地址&#xff1a;https://pan.baidu.com/s/1eN1PX6gKdKgwJ24CM0bDsw 提取码&#xff1a;4bpp 目前最新jdk的版本是21&#xff0c;可以下载不同…

SpringSecurity入门demo(一)集成与默认认证

一、集成与默认认证&#xff1a; 1、说明&#xff1a;在引入 Spring Security 项目之后&#xff0c;没有进行任何相关的配置或编码的情况下&#xff0c;Spring Security 有一个默认的运行状态&#xff0c;要求在经过 HTTP 基本认证后才能访问对应的 URL 资源&#xff0c;其默认…

IDEA 启动错误提示:Command line is too long. Shorten command line

IDEA 启动错误提示&#xff1a;Command line is too long. Shorten command line Command line is too long. Shorten command line IDEA 启动错误提示&#xff1a;Command line is too long. Shorten command line快速修改原因解释 快速修改 Edit Configurations->configu…

Kotlin程序设计(二)面向对象

Kotlin程序设计中级篇 我们在前面已经学习了Kotlin程序设计的基础篇&#xff0c;本章我们将继续介绍更多Kotlin特性&#xff0c;以及面向对象编程。 函数 其实函数我们在一开始就在使用了&#xff1a; fun main() {println("Hello World") }我们程序的入口点就是…

【AI视野·今日CV 计算机视觉论文速览 第285期】Mon, 8 Jan 2024

AI视野今日CS.CV 计算机视觉论文速览 Mon, 8 Jan 2024 Totally 66 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Denoising Vision Transformers Authors Jiawei Yang, Katie Z Luo, Jiefeng Li, Kilian Q Weinberger, Yonglong Tian, Yue…