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.mfbz.cn/a/592607.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python设计模式 - 单例模式

定义 单例模式是一种创建型设计模式, 其主要目的是确保一个类只有一个实例, 并提供一个全局访问点来访问该实例。 结构 应用场景 资源管理:当需要共享某个资源时,例如数据库连接、线程池、日志对象等,可以使用单例模…

电路板/硬件---器件

电阻 电阻作用 电阻在电路中扮演着重要的角色,其作用包括: 限制电流:电阻通过阻碍电子流动的自由而限制电流。这是电阻最基本的功能之一。根据欧姆定律,电流与电阻成正比,电阻越大,通过电阻的电流就越小。…

OpenCV(六) —— Android 下的人脸识别

本篇我们来介绍在 Android 下如何实现人脸识别。 上一篇我们介绍了如何在 Windows 下通过 OpenCV 实现人脸识别,实际上,在 Android 下的实现的核心原理是非常相似的,因为 OpenCV 部分的代码改动不大,绝大部分代码可以直接移植到 …

Pytorch: nn.Embedding

文章目录 1. 本质2. 用Embedding产生一个10 x 5 的随机词典3. 用这个词典编码两个简单单词4. Embedding的词典是可以学习的5. 例子完整代码 1. 本质 P y t o r c h \mathrm{Pytorch} Pytorch 的 E m b e d d i n g \mathrm{Embedding} Embedding 模块是一个简单的查找表&#…

【多变量控制系统 Multivariable Control System】(3)系统的状态空间模型至转换方程模型(使用Python)【新加坡南洋理工大学】

一、转换式 二、系统的状态空间模型 由矩阵A, B, C, D给出: 三、由状态空间模型转化为转换方程模型 函数原型(版权所有:scipy): def ss2tf(A, B, C, D, input0):r"""State-space to transfer functi…

【netty系列-03】深入理解NIO的基本原理和底层实现(详解)

Netty系列整体栏目 内容链接地址【一】深入理解网络通信基本原理和tcp/ip协议https://zhenghuisheng.blog.csdn.net/article/details/136359640【二】深入理解Socket本质和BIOhttps://zhenghuisheng.blog.csdn.net/article/details/136549478【三】深入理解NIO的基本原理和底层…

SpringCloud Alibaba Nacos简单应用(三)

文章目录 SpringCloud Alibaba Nacos创建Nacos 的服务消费者需求说明/图解创建member-service-nacos-consumer-80 并注册到NacosServer8848创建member-service-nacos-consumer-80修改pom.xml创建application.yml创建主启动类业务类测试 SpringCloud Alibaba Nacos 创建Nacos 的…

鸿蒙通用组件Image简介

鸿蒙通用组件Image简介 图片----Image图片支持三种引用方式设置图片宽高设置图片缩放模式设置图片占位图设置图片重复样式设置图片插值效果 图片----Image Image主要用于在应用中展示图片 Image($r(app.media.app_icon)).width(150) // 设置宽.height(150) // 设置高.objectF…

使用docker-compose编排lnmp(dockerfile)完成wordpress

文章目录 使用docker-compose编排lnmp(dockerfile)完成wordpress1、服务器环境2、Docker、Docker-Compose环境安装2.1 安装Docker环境2.2 安装Docker-Compose 3、nginx3.1 新建目录,上传安装包3.2 编辑Dockerfile脚本3.3 准备nginx.conf配置文…

redis集群-主从机连接过程

首先从机需要发送自身携带的replid和offset向主机请求连接 replid:replid是所有主机在启动时会生成的一个固定标识,它表示当前复制流的id,当从机第一次请求连接时,主机会将自己的replid发送给从机,从机在接下来的请求…

docker部署nginx并配置https

1.准备SSL证书: 生成私钥:运行以下命令生成一个私钥文件。 生成证书请求(CSR):运行以下命令生成证书请求文件。 生成自签名证书:使用以下命令生成自签名证书。 openssl genrsa -out example.com.key 2048 …

【Java探索之旅】内部类 静态、实例、局部、匿名内部类全面解析

文章目录 📑前言一、内部类1.1 概念1.2 静态内部类1.3 实例内部类1.4 局部内部类1.5 匿名内部类 🌤️全篇总结 📑前言 在Java编程中,内部类是一种强大的特性,允许在一个类的内部定义另一个类,从而实现更好的…

Vue3-element-plus表格

一、element-plus 1.用组件属性实现跳转路由 <el-menu active-text-color"#ffd04b" background-color"#232323" :default-active"$route.path" //高亮 text-color"#fff"router><el-menu-item index"/article/channe…

第十篇:深入文件夹:Python中的文件管理和自动化技术

深入文件夹&#xff1a;Python中的文件管理和自动化技术 1 文件系统基础操作 在今天的技术博客中&#xff0c;我们将深入探讨Python中的文件系统基础操作。文件系统对于任何操作系统都是不可或缺的组成部分&#xff0c;它管理着数据的存储、检索以及维护。Python通过其标准库中…

节能洗车房车牌识别项目实战

项目背景 学电子信息的你加入了一家节能环保企业&#xff0c;公司的主营产品是节能型洗车房。由于节水节电而且可自动洗车&#xff0c;产品迅速得到了市场和资本的认可。公司决定继续投入研发新一代产品&#xff1a;在节能洗车房的基础上实现无人值守的功能。新产品需要通过图…

Java高阶私房菜:JVM性能优化案例及讲解

目录 核心思想 优化思考方向 压测环境准备 堆大小配置调优 调优前 调优后 分析结论 垃圾收集器配置调优 调优前 调优后 分析结论 JVM性能优化是一项复杂且耗时的工作&#xff0c;该环节没办法一蹴而就&#xff0c;它需要耐心雕琢&#xff0c;逐步优化至理想状态。“…

Qt服务器端与客户端交互

Qt做客户端与服务器端交互第一步引入network 第一步引入network后继续编程首先界面设计 创建server和socket 引入QTcpServer&#xff0c;QTcpSocket MainWindow.h代码如下 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QTcpServer&…

EPAI手绘建模APP演示板、材质编辑器、样式编辑器

(11) 更多 图 74 更多工具栏 ① 演示板&#xff1a;打开关闭演示板。演示板用来显示从设备导入的模型图纸图片或者打开模型建模教程网页&#xff0c;是建模过程中一个辅助功能。有些设备有小窗口功能有些没有&#xff0c;对于没有小窗口功能的设备&#xff0c;通过演示板能够在…

智慧旅游引领旅游行业创新发展:借助智能科技的力量,实现旅游资源的优化配置和高效利用,推动旅游行业的转型升级和可持续发展

目录 一、引言 二、智慧旅游的定义与特点 1、信息化程度高 2、智能化服务丰富 3、互动性强 4、个性化服务突出 5、可持续性发展 三、智慧旅游在旅游行业创新发展中的作用 &#xff08;一&#xff09;优化旅游资源配置 &#xff08;二&#xff09;提升旅游服务质量 &…

【吃透Java手写】- Spring(上)-启动-扫描-依赖注入-初始化-后置处理器

【吃透Java手写】Spring&#xff08;上&#xff09;启动-扫描-依赖注入-初始化-后置处理器 1 准备工作1.1 创建自己的Spring容器类1.2 创建自己的配置类 ComponentScan1.3 ComponentScan1.3.1 Retention1.3.2 Target 1.4 用户类UserService Component1.5 Component1.6 测试类 2…
最新文章