Oracle基础4

1 视图
1.1 视图的基本创建
查询 t_owners 和 查询 view_test_1 实际是一样的
数据源表发生变化 那么视图也会发生变化
drop view VIEW_TEST_1;
select *
from T_OWNERS;
create view view_test_1 as
(
select *
from T_OWNERS
    );
select *
from view_test_1;
1.2 对复杂sql简化
显示 业主id 业主name 地址 区域
create view view_test_2 as
(
select T_OWNERS.ID,
       T_OWNERS.NAME  user_name,
       T_ADDRESS.NAME addr_name,
       T_AREA.NAME    area_name
from T_OWNERS
         join T_ADDRESS on T_OWNERS.ADDRESSID = T_ADDRESS.ID
         join T_AREA on T_ADDRESS.AREAID = T_AREA.ID
    );
select *
from VIEW_TEST_2;
视图简化/显示想要显示的字段

查询视图


todo 1.3 向后兼容
创建表 v_1 具有 编号 姓名 年龄字段
drop view V_1;
create table v_1
(
    编号 number,
    姓名 varchar2(30),
    年龄 number
);
drop table v_1;
插入数据
insert into v_1
values (1, '老王', 18);
commit;
select *
from v_1;
查询 所有 姓名


创建表 v_2 具有 id name age sex 字段
drop table v_2;
create table v_2
(
    id   number,
    name varchar2(30),
    age  number,
    sex  varchar2(30)
);
通过 v_1 同步数据到 v_2
insert into v_2(id, name, age) (select * from v_1);
commit;
select *
from v_2;
删除表 v_1
drop table v_1;
查看数据


创建视图 使得 v_2 可以向后兼容
create view v_1 as
(
select id 编号, name 姓名, age 年龄
from v_2
    );
select *
from v_1;
2 视图的简单使用
-- 简单视图: 数据来源只有一个表 没有聚合操作
-- 注意: 可以进行数据的事务性操作
2.1 创建视图  获取t_address中所有areaid为3的视图
create view view_test_3
as
select *
from T_ADDRESS
where AREAID = 3;
-- 查看视图
select *
from view_test_3;
select *
from T_ADDRESS;
insert into T_ADDRESS
values (8, '翻斗花园', 1, 1);
-- 修改非视图产生的约束字段 把视图中 name=西三旗 改成 name=西二旗
update view_test_3
set NAME = '西三旗'
where name = '西二旗';
-- 查看视图

2.2 修改视图外的数据(无法修改 视图外的数据)

-- 注意:
-- 视图中显示的数据 我们可以进行任意操作 并且可以影响 我们的原始表
-- 但是 视图以外的数据 不可以通过视图进行任何操作(操作权限仅限视图中的数据)
2.3 修改视图产生的约束字段
-- 把视图中的 areaid 改成 1
update view_test_3
set NAME = '召唤师峡谷'
where id = 8;
update view_test_3
set NAME = '召唤师峡谷'
where id = 7;
update view_test_3
set AREAID = 1
where ID = 7;
update T_ADDRESS
set AREAID = 3
where ID = 7;
-- 查看视图

-- 查看原始数据表

-- 如果修改 数据产生的字段 就会造成我们视图数据不完整(不希望这样)
2.4 带约束 with check option 的视图
-- 创建视图 获取t_address中所有areaid为3的数据 并设置为 with check option
drop view view_test_4;
create view view_test_4 as
select *
from T_ADDRESS
where AREAID = 3
with check option;
-- 查看视图
select *
from view_test_4;
-- 修改非视图产生约束字段

-- 查看视图

-- 修改视图产生约束字段的数据
update view_test_4
set AREAID = 1
where ID = 7;
delete
from view_test_4
where AREAID = 3;
rollback;
-- 删除视图产生约束字段的数据

-- 插入视图产生约束字段的数据

-- 查看视图


3 只读视图 视图替换 无数据源视图
3.1 只读视图(数据不可变化) with read only
-- 创建只读视图

-- 修改数据

-- 插入数据

-- 删除数据


3.2 视图替换 or replace
-- 创建视图 替换 上一个视图 (视图内容不一样)

-- 查看


3.3 没有数据源的视图 force
-- 创建一个没有数据源的视图

-- 查看视图

-- 创建数据源表


3.4 删除视图
-- 删除视图

-- 删除数据表


4 复杂视图
-- 复杂视图:
-- 注意:
4.1 需求:创建视图,查询显示业主编号,业主名称,业主类型名称
-- 创建视图,查询显示业主编号,业主名称,业主类型名称 t_owners t_ownertype
create view view_test_6 as
select t1.ID, t1.NAME, t2.NAME as type_name
from T_OWNERS t1
         join T_OWNERTYPE t2 on t1.OWNERTYPEID = t2.ID;
-- 查看视图
select *
from view_test_6;
-- 修改 视图中数据 name='范冰冰'  id=1
-- (注意: )
update view_test_6
set NAME = '范冰冰'
where ID = 1;
-- 查看视图

-- 查看t_owners表数据
select *
from T_OWNERS;
-- 修改 视图中数据 type_name='商业' id=1
-- (注意: )

-- 查看视图数据

-- 查看t_ownertype表数据
select *
from T_OWNERTYPE;

4.2 需求:创建视图,按年月统计水费金额t_account
-- 创建视图,按年year 月month 统计水费金额money t_account
create view view_test_7 as
select YEAR, MONTH, sum(MONEY) as money
from T_ACCOUNT
group by YEAR, MONTH;
-- 查看视图
select *
from view_test_7;
--修改数据 把视图中month为01 的money值进行修改
update view_test_7
set money = 1000
where MONTH = '01';

5 物化视图的使用
5.1 需求:查询地址 ID,地址名称和所属区域名称 t_address t_area
-- 创建手动更新的物化视图(默认)
-- create materialized view 视图名
-- build immediate
-- refresh force on demand
create materialized view view_test_8
            build immediate
    refresh force on demand
as
select T_ADDRESS.ID, T_ADDRESS.NAME, T_AREA.NAME area
from T_ADDRESS
         join T_AREA on T_ADDRESS.AREAID = T_AREA.ID;
-- 查询视图
select *
from VIEW_TEST_8;
-- 向 t_address添加数据 (8,'宏福苑小区',1,1) 查看是否同步数据
insert into T_ADDRESS
values (9, '宏福苑小区', 1, 1);
commit;
-- 这里需要手动刷新 begin dbms_mview.refresh('view_test_8') end;
begin
    DBMS_MVIEW.REFRESH('view_test_8');
end;

5.2 创建自动更新的物化视图
-- 需求:查询地址 ID,地址名称和所属区域名称 t_address t_area
-- create materialized view 视图名
-- build immediate
-- refresh force on commit
drop materialized view VIEW_TEST_9;
create materialized view VIEW_TEST_9
            build immediate
    refresh force on COMMIT
as
select T_ADDRESS.ID, T_ADDRESS.NAME, ta.NAME area
from T_ADDRESS
         join T_AREA TA on T_ADDRESS.AREAID = TA.ID;
-- 查看视图
select *
from VIEW_TEST_9;
-- 向 t_address添加数据 (9,'龙旗2区',1,1) 查看是否同步数据
insert into T_ADDRESS
values (10, '龙旗2区', 1, 1);
commit;
-- 查看视图
select *
from VIEW_TEST_9;

5.3 创建不生成数据的物化视图 bulid deferred(延时生成数据)
-- 需求:查询地址 ID,地址名称和所属区域名称 t_address t_area
-- create materialized view 视图名
-- build deferred
-- refresh force on commit
create materialized view view_test_10
            build deferred
    refresh force on COMMIT
as
select T_ADDRESS.ID, T_ADDRESS.NAME, T_AREA.NAME area
from T_ADDRESS
         join T_AREA on T_ADDRESS.AREAID = T_AREA.ID;
-- 查看数据
select *
from VIEW_TEST_10;
-- 刷新后生成数据 begin DBMS_MVIEW.REFRESH('view_test_10'); end;
begin
    DBMS_MVIEW.REFRESH('view_test_10');
end;

6 物化视图 增量/全量 更新
6.1 创建增量更新物化视图
-- 需求:查询地址 ID,地址名称和所属区域名称 t_address t_area
-- 注意:
-- 1. 创建增量更新物化视图 所有的源数据表 必须有物化视图日志
-- 2. 创建的增量更新物化视图 中 必须包含 源数据表中的rowid
create materialized view log on T_ADDRESS with rowid;
create materialized view log on T_AREA with rowid;
-- 创建物化视图日志
-- create materialized view log on T_ADDRESS with rowid;
-- create materialized view log on T_AREA with rowid;
select *
from MLOG$_T_AREA;
select *
from MLOG$_T_ADDRESS;
-- 查看t_address的日志 MLOG$_T_ADDRESS
select *
from T_ADDRESS;
-- 向t_address表插入数据 (10,'白各庄社区',1,1)
insert into T_ADDRESS
values (11, '白各庄社区', 1, 1);
-- 查看t_address的日志 MLOG$_T_ADDRESS
create materialized view view_test_11
            build immediate
    refresh fast on DEMAND
as
select  T_ADDRESS.ROWID as addr_rowid,
        T_AREA.ROWID as area_rowid,
        T_ADDRESS.ID, T_ADDRESS.NAME, T_AREA.NAME area
from T_ADDRESS
         join T_AREA on T_ADDRESS.AREAID = T_AREA.ID;
select * from C##WATERUSER.VIEW_TEST_11;
insert into T_ADDRESS values (12, '顺义', 1, 1);
commit ;
begin
    DBMS_MVIEW.REFRESH('view_test_11',method =>'f');
end;
select * from C##WATERUSER.VIEW_TEST_11;

-- 创建增量更新手动刷新表
-- create materialized view view_test_11
-- build immediate
-- refresh fast on demand
-- as
-- select
--         T_ADDRESS.ROWID as addr_rowid,
--         T_AREA.ROWID as area_rowid,
--         T_ADDRESS.ID, T_ADDRESS.NAME, T_AREA.NAME area
-- from T_ADDRESS
-- inner join T_AREA on T_ADDRESS.AREAID = T_AREA.ID;

-- 向t_address表中增加数据(11, '顺义', 1, 1)

-- 查看T_ADDRESS表数据

-- 查看视图数据(非select方式查看)

-- 手动刷新 begin DBMS_MVIEW.REFRESH('view_test_', METHOD =>'f'); end;


7 创建全量物化视图
7.1 需求: 查询地址 ID,地址名称和所属区域名称
-- create materialized 视图名
-- build immediate
-- refresh complete on commit

-- 向t_address表添加数据(12, '顺义校区', 1, 1)

-- 查询 t_address表 数据

-- 查询视图

7.2 删除视图
-- drop materialized view 视图名;

7.3 删除视图日志
-- drop materialized view log on 数据表名;


8 序列
8.1基本使用
-- 创建序列  seq_a 默认为从1开始 差值为1 的等差数列

-- 获取序列值
-- 序列名.currval 当前值(需要先获取next值 才可以获取当前值)
-- select seq_a.currval from dual;

-- 序列名.nextval 下一个值


8.2 最 大/小 值
-- 需求1: 创建序列名为 seq_b,它以5递增,从10开始,最大值为30,最小值为2。
-- create sequence 序列名
-- increment by 递增值
-- start with 起始值
-- maxvalue 最大值
-- minvalue 最小值;

-- 起始值不能小于最小值
-- 查看序列值(超过最大值报错)


8.3 循环cycle
-- 需求2: 创建序列名为 seq_c,它以5递增,从10开始,最大值为30,最小值为2, 带循环
-- 默认没有循环
-- 默认cache值为20

-- 查看序列值

-- 删除序列


8.4 给数据表增加序列值
-- 1 创建序列 seq_student, 每次递增2, 从1000开始

-- 2 创建学生表 tb_student(sid, sname)
create table tb_student
(
    sid   number,
    sname varchar2(30)
);
-- 3 插入数据, sid 使用序列生成的值

-- 4 查询数据

-- 5 重置序列起始值
-- truncate table 不能重置序列值

-- 重置序列值 直接删除序列 重新创建即可
-- drop sequence

-- 6 查询数据


9 同义词
-- create [public] synonym 名称 for obj;

-- 1 需求:为表 T_AREA  创建( 私有 )同义词 名称为 sym_test1

-- 2 需求:为表 T_AREA  创建( 共有 )同义词 名称为 sym_test2

-- 3 查看私有同义词

-- 4 验证 其他用户 是否能查看公共同义词


10 索引
10.1 普通索引
-- 创建表 t_index_test
create table t_index_test
(
    id   number,
    name varchar2(30)
);
-- 插入数据
begin
    for i in 1 .. 10000000
        loop
            insert into t_index_test values (i, 'dev' || i);
        end loop;
    commit;
end;
-- 验证性能 在虚拟机中set timing on可以开启sql执行时间检测
-- 没有索引的情况下 查询
select *
from t_index_test
where name = 'dev5555555';
-- 创建普通索引
-- create index 索引名 on 表名(索引字段);
create index index_test on t_index_test (name);
-- 验证性能 在虚拟机中set timing on可以开启sql执行时间检测
select *
from t_index_test
where name = 'dev5555555';

10.2 唯一索引
-- 唯一索引
-- create unique index 索引名 on 表名(索引字段);
create unique index index_test2 on t_index_test (id);
-- 验证性能
select *
from t_index_test
where id = 5555555;

10.3 复合索引
-- 复合索引
create index index_test3 on t_index_test (id, name);
-- 验证性能
select *
from t_index_test
where name = 'dev5555555'
  and id = 5555555;


 

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

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

相关文章

VMware虚拟机中ubuntu使用记录(6)—— 如何标定单目相机的内参(张正友标定法)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、张正友相机标定法1. 工具的准备2. 标定的步骤(1) 启动相机(2) 启动标定程序(3) 标定过程的操作(5)可能的报错 3. 标定文件内容解析 前言 张正友相机标定法…

编译 x264 for iOS

文章目录 编译在 FFMpeg 启用 x264其他编译选项报错处理 环境 : macOS 14.3.1 x264 - 20191217-2245 编译 1、下载 x264 源码 http://download.videolan.org/pub/videolan/x264/snapshots/ 这里我下载x264-snapshot-20191217-2245.tar.bz2 (截止2024-…

centos学习- ps命令详解-进程监控的利器

ps命令详解:Linux进程监控的利器 在Linux系统管理中,进程监控是一个至关重要的环节。ps命令是Linux系统中一个功能强大的进程查看工具,通过它可以获取当前系统中所有进程的快照信息,并深入了解各个进程的详细信息。结合其各种选项…

OpenAI下周将发布ChatGPT搜索引擎,挑战谷歌搜索!

目前,多方位消息证实,OpenAI将会在5月9日上午10点公布该消息,大约是北京时间周五的凌晨2点。 5月3日,前Mila研究员、麻省理工讲师Lior S爆料,根据OpenAI最新的SSL证书日志显示,已经创建了search.chatgpt.c…

跨域初识--如何解决跨域

04 【跨域初识】 1.同源策略 同源策略(Same-Origin Policy)最早由Netscape 公司提出,是浏览器的一种安全策略同源: 协议、域名、端口号必须完全相同跨域: 违背同源策略就是跨域 2.如何解决跨域 2.1 JSONP jsonp只支持get请求不支持post请…

Flutter笔记:Widgets Easier组件库(12)使用消息吐丝(Notify Toasts)

Flutter笔记 Widgets Easier组件库(12)使用消息吐丝(Notify Toasts) - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 29114848416…

Hyperledger Fabric:构建企业级区块链网络的利器

一、引言 在数字化浪潮中,区块链技术如同一颗璀璨的明珠,以其去中心化、数据不可篡改的特性,在金融、供应链、物联网等多个领域大放异彩。而在这个领域里,Hyperledger Fabric以其开源、灵活、安全的特点,成为企业级区…

ICode国际青少年编程竞赛- Python-1级训练场-基础训练2

ICode国际青少年编程竞赛- Python-1级训练场-基础训练2 1、 a 4 # 变量a存储的数字是4 Dev.step(a) # 因为变量a的值是4,所以Dev.step(a)就相当于Dev.step(4)2、 a 1 # 变量a的值为1 for i in range(4):Dev.step(a)Dev.turnLeft()a a 1 # 变量a的值变为…

C语言数据结构之队列

目录 1.队列的概念及结构2.队列的实现逻辑3.队列的代码实现4.相关例题选择题 •͈ᴗ•͈ 个人主页:御翮 •͈ᴗ•͈ 个人专栏:C语言数据结构 •͈ᴗ•͈ 欢迎大家关注和订阅!!! 1.队列的概念及结构 队列:只允许在一端进行插入数据操作&#x…

【Flask 系统教程 2】路由的使用

Flask 是一个轻量级的 Python Web 框架,其简洁的设计使得构建 Web 应用变得轻而易举。其中,路由是 Flask 中至关重要的一部分,它定义了 URL 与视图函数之间的映射关系,决定了用户请求的处理方式。在本文中,我们将深入探…

C++关联容器1——map,multimap,set,multiset介绍,pair类型

目录 关联容器 使用关联容器 使用map 使用set 关联容器概述 定义关联容器 初始化multimap或multiset 关键字类型的要求 有序容器的关键字类型 使用关键字类型的比较函数 pair 类型 创建pair 对象的函数 关联容器 关联容器支持高效的关键字查找和访问。 两个主要的关…

【阿里云服务器】ubuntu 22.04.1安装docker以及部署java环境

我的服务器配置是2GB CPU 2GB 内存 Ubuntu22.04 目录 一、阿里云 ubuntu 22.04.1安装docker 二、docker基础命令 三、Windows电脑访问云服务器 四、安装java环境 安装OpenJDK 8(可以根据需要安装其他版本的JDK) 安装java的依赖管理工具maven 一、…

Java | Spring框架 | BeanFactory与ApplicationContext

Spring容器:BeanFactory与ApplicationContext Spring容器是Spring框架的核心,负责实例化、配置和组装Bean。 Spring容器有两种主要类型:BeanFactory和ApplicationContext。 一、BeanFactory 基本功能:BeanFactory是Spring框架…

Web Storage 笔记12 操作购物车

相关内容:购物车实例 WebStorage存储空间足够大,访问都在客户端(Client)完成。有些客户端先处理或检查数据,就可以直接使用WebStorage进行存储,不仅可以提高访问速度,还可以降低服务器的练习。负担。例如,购…

vue设置必填项

表单&#xff1a; <el-form-item label"标题" prop"title" ><el-input placeholder"标题" v-model"form.title"></el-input></el-form-item> 在data中添加一个rules来规定 rules: {title: [{ required: t…

webpack打包后index.html引用文件地址问题

在前端开发中&#xff0c;src 属性指定的相对路径是相对于当前 HTML 文件的路径&#xff0c;而不是相对于网站的根目录。这种相对路径的解析方式是浏览器的行为。 当浏览器解析 HTML 文件中的 <script> 标签时&#xff0c;它会根据相对路径来构建请求 URL。如果你在 HTM…

刷机维修进阶教程-----魅族机型更改参数 修复基带 操作步骤解析

前面几篇博文简单解析了下小米 vivo oppo等机型修复基带与更改参数的一些步骤。对于高通芯片来说。明白其原理。一通百通。最近有粉丝私信询问一键新机有关事宜。在与一些工作室合作中发现。一些过项目具体检测的要区别对待。有的只需要修改型号即可方便跳过项目的校验机制, …

DiffSeg——基于Stable Diffusion的无监督零样本图像分割

概述 基于计算机视觉的模型的核心挑战之一是生成高质量的分割掩模。大规模监督训练的最新进展已经实现了跨各种图像风格的零样本分割。此外&#xff0c;无监督训练简化了分割&#xff0c;无需大量注释。尽管取得了这些进展&#xff0c;构建一个能够在没有注释的零样本设置中分…

带文字海报流程自动化

上一篇文章&#xff1a; 带文字海报流程自动化 - 知乎 项目代码整理在&#xff1a; https://github.com/liangwq/Chatglm_lora_multi-gpu​github.com/liangwq/Chatglm_lora_multi-gpu 根据用户的输入生成图片prompt模块代码封装&#xff1a; from openai import OpenAI im…

【无标题】vue webrtc 播放rtsp视频流

最近有个小活其中有涉及播放大华及海康摄像头视频流的需求&#xff0c;经调查发现可以使用webrtc来实现相关功能&#xff0c;记录一下&#xff0c;步骤如下&#xff1a; &#xff11;、下载webrtc &#xff1a;Releases mpromonet/webrtc-streamer GitHub winows下下载&…