Oracle对象——视图之简单视图与视图约束
文章目录
- 什么是视图
- 为什么会使用视图
- 视图语法
- 案例
- 简单视图的创建
- 更改数据基表,视图数据会变化么?
- 更改视图数据,基表数据会变更么?
- 带检查约束的视图
- 结论
- 创建只读视图(MySQL不支持)
- 总结
什么是视图
视图是一种数据对象,是从一个或者多个数据表或视图中导出的虚拟表。
视图中的数据,并不是真正的存储在视图中。视图的表结构与数据是对数据表查询的结果。
说到底,视图就是对SQL语句的一种封装。
为什么会使用视图
使用视图,会具有以下几种优点:
-
1、简化数据操作。
在平时开发中,可能存在关联多张表的查询,每次都需要写sql,过于繁琐。
此时就可以将SQL语句,放入视图中,每次进来直接查询视图就能获取对应的数据信息。 -
2、可以过滤敏感类数据,只展示需要的数据。
业务表中存在很多的敏感数据信息,并不想直接暴露给开发者所见,此时就能创建视图,根据编写SQL语句,将想要显示的数据放置于虚拟表中。 -
3、可以对视图设置
只读等权限。
视图提供了一个简单而有效的安全机制,可以定制不同用户对数据的访问权限。 -
4、提供向后兼容性
使用户能够在表的架构更改时,为表创建向后兼容接口。
视图语法
创建视图的语法如下:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view[(alias[, alias]...)]AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY [CONSTRAINT constraint]];
选项解释:
| 命令名 | 命令含义 |
|---|---|
| CREATE | 创建视图 |
| OR REPLACE | 修改视图,若创建的视图已存在,则自动创建新的视图,否则会创建视图报错。 |
| force | 不管基表是否存在,都会创建视图。建视图时,不会监测其中的SQL语句,以及from后的表是否存在。 |
| subquery | 视图数据内容的sql语句,即被包装的sql |
| WITH CHECK OPTION | 插入或修改的数据行必须满足视图定义的某些约束。 |
| WITH READ ONLY | 将视图设置为只读,无法进行DML(增删改)操作。 |
删除指定的视图:
drop view view_name
案例
简单视图的创建
视图中的SQL只是单表查询,并且没有聚合函数。
如下,有这么一张基表。(数据库中存在的表)

此时,将这个表中的所有数据,放入视图中,视图语句如下:
create or REPLACE VIEW view_test
as
select * from user
从视图中查询数据结果:
select * from view_test

更改数据基表,视图数据会变化么?
执行更改语句,再次查看视图数据:
update user set user_age = 22 where id = 1
SELECT * from user

再次查询视图,看数据是否变更:
select * from view_test

【结论:】更改基表的数据后,视图中的数据会发生变化!!
更改视图数据,基表数据会变更么?
在视图中进行 update 操作,再次查看基表,查看数据是否变更:
update view_test set user_age = 18 where id = 1

查看基表:

【结论:】视图中执行update操作语句后,基表中的数据也会同步变更!!
视图,只是数据库中的一个SQL语句,并不是一张真实的表!!
带检查约束的视图
WITH CHECK OPTION
【疑问:】什么叫检查约束?
比如在视图中的SQL,由于视图数据是根据
某些条件 如 age = xxx进行了筛选。
在上面的结论中,也说到了在对视图进行update操作时,也会刷新 原表 中的数据记录。
此时,将要将视图中某条记录的age值,修改成其他值,如果加了WITH CHECK OPTION,则不会执行成功。
控制数据的某些值,只能是指定的值。必须符合视图中sql语句的条件,才能update执行成功。
约束还有一个是WITH READ ONLY。
将视图设置为
只读模式,也就是只允许select,不能进行update、delete等。
创建一个带检查约束的视图,SQL如下所示:
create or replace view vw_test2 as
select * from user WHERE user_age = '18'
with CHECK OPTION
注意where 后的条件,等会会验证!
创建视图后,查询数据信息,如下所示:

对视图中的数据进行修改,先修改user_name属性值。
update vw_test2 set user_name = 'Jone1' where id = 1

再修改其user_age属性值,SQL如下所示:
update vw_test2 set user_age = '22' where id = 1
执行后,则出现了如下的现象:

检查约束修改失败!!
也就是说:
无法修改创建视图时,where条件语句后的设定值。
如果在创建视图时,where条件后跟的是数据的范围呢?
创建一个视图,视图中的数据根据
user_age > 18进行筛选。
create or replace view vw_test3 as
select * from user WHERE user_age > '18'
with CHECK OPTION
执行后,进行查询,如下:
select * from vw_test3;

修改id = 2的数据信息,将年龄修改为 20。
update vw_test3 set user_age = '20' where id = 2
执行后,现象如下:

诶,执行成功了!
是不是说,检查约束无效了呢?!
那么就再验证一个修改语句,将user_age修改为10,如果说约束失效,那么就一定可以修改成功!
update vw_test3 set user_age = '10' where id = 2

发现:
修改失败了!
结论
增加视图的检查约束WITH CHECK OPTION后,如果对数据进行修改操作,那么修改 视图 where条件后的字段值,不允许超出其范围!
创建只读视图(MySQL不支持)
WITH READ ONLY
使用Oracle创建一个新的视图,必须保证是只读模式。
create or replace view vw_test4_readonly as
select * from user WHERE user_age > '18'
with read only
【扩展】如果是 必须创建mysql的只读视图,可以另辟蹊径:
间接方式创建只读视图:
创建对所有表具有SELECT权限的用户和CREATE VIEW权限,然后使用此用户创建视图并在CREATE VIEW语句中指定SQL
资料参考
创建好只读视图后,尝试进行修改操作:
update vw_test4_readonly set user_age = '10' where id = 2
当执行后,则会出现下列的报错信息:

总结
只读视图,只允许进行select操作。
相关文章:
Oracle对象——视图之简单视图与视图约束
文章目录什么是视图为什么会使用视图视图语法案例简单视图的创建更改数据基表,视图数据会变化么?更改视图数据,基表数据会变更么?带检查约束的视图结论创建只读视图(MySQL不支持)总结什么是视图 视图是一种…...
SAP模块常用增强总结
MM模块: 采购订单增强: BADI :ME_GUI_PO_CUST ME_PROCESS_PO_CUST 物料凭证增强: BADI:MB_DOCUMENT_BADI USER-EXIT:MBCF0002 实现功能1、当参照预留过帐时,检查填入数量是否小于预留数量 2…...
当make执行遇到 Arguments too long
1. 问题 Ubuntu20.04上make编译生成so的时候报错: make[1]:execvp:/bin/sh:Arguments too long对应makefile中的报错位置,仅仅是生成so的时候报错,伪代码如下 ${build_tool} -shared -fpic -o "$" ${OBJ_FILE} ${LDFLAGS}然而如…...
《手把手教你》系列基础篇(七十三)-java+ selenium自动化测试-框架设计基础-TestNG实现启动不同浏览器(详解教程)
1.简介 上一篇文章中,从TestNg的特点我们知道支持变量,那么我们这一篇就通过变量参数来启动不同的浏览器进行自动化测试。那么如何实现同时启动不同的浏览器对脚本进行测试,且听我娓娓道来。 2.项目实战 2.1创建一个TestNg class 1.首先按…...
Maven基础
Maven简介 传统项目: jar包不统一 不兼容 项目中有部分jar包会升级 没升级的部分会起冲突 管理复杂 Maven本质是一个项目管理工具 pom POM Project Object Model 项目对象模型 把项目以对象形式进行管理 先写 pom.xml 的配置文件 代表一个项目 1个项目对应1个po…...
C++入门:初识类和对象
C入门:类和对象1 本节目录C入门:类和对象11.auto关键字(C11)1.1类型别名思考1.2auto简介typeid运算符:获取类型信息1.3 auto的使用细则1.4auto不能推到的场景2.基于范围的for循环(C11)2.1范围for的语法2.2范围for的使用条件3.指针…...
BERT在CNN上也能用?看看这篇ICLR Spotlight论文丨已开源
如何在卷积神经网络上运行 BERT?你可以直接用 SparK —— 字节跳动技术团队提出的提出的稀疏层次化掩码建模 ( Designing BERT for Convolutional Networks: Sparse and Hierarchical Masked Modeling ),近期已被人工智能顶会 ICLR 2023 收录为 Spotligh…...
【MFC】模拟采集系统——界面设计(17)
功能介绍 启动界面 开始采集: PS:不涉及 数据保存,重现等功能 界面设计 界面分为三块:顶部黑条带关闭按钮、左边对话框,右边的主界面 资源: 顶部黑条 top.bmp 2* 29 (宽 * 高 像素点&…...
锐捷(十五)mpls vxn跨域optionc场景
一 实验拓扑二 实验需求ce1和ce2为两个分公司,要求两个分公司之间用mpls vxn 进行通信,组网方式是optionc。三 实验分析optionc在转发平面上有点难理解,有一些关键点需要注意,大家点击链接可以参考我上篇发过的一个文章࿱…...
2023备战金三银四,Python自动化软件测试面试宝典合集(七)
马上就又到了程序员们躁动不安,蠢蠢欲动的季节~这不,金三银四已然到了家门口,元宵节一过后台就有不少人问我:现在外边大厂面试都问啥想去大厂又怕面试挂面试应该怎么准备测试开发前景如何面试,一个程序员成长之路永恒绕…...
redis 主从复制
在redis的持久化RDB与AOF详解文章中,我们知道如果redis宕机了,我们可以通过AOF 和 RDB 文件的方式恢复数据,从而保证数据的丢失(或少量损失)从而提高稳定性。但是,如果我们数据只存在一台redis服务器中&…...
如何用Redis实现延迟队列
背景前段时间有个小项目需要使用延迟任务,谈到延迟任务,我脑子第一时间一闪而过的就是使用消息队列来做,比如RabbitMQ的死信队列又或者RocketMQ的延迟队列,但是奈何这是一个小项目,并没有引入MQ,我也不太想…...
项目文件相关总结
风险登记册 风险登记册记录了已识别单个风险的详细信息。其主要内容包括: 已识别的风险清单潜在的风险责任人潜在的风险应对措施清单风险管理计划要求的其他信息供方选择标准 供方选择标准用于确保选出的建议书将提供最佳质量的所需服务,主要内容 包括: 能力和潜力产品成本…...
ZooKeeper集群搭建步骤
一、准备虚拟机准备三台虚拟机,对应ip地址和主机名如下:ip地址Hostname192.168.153.150ant163192.168.153.151ant164192.168.153.152ant165修改hostname,并使之生效[rootlocalhost /]# hostnamectl set-hostname zookeeper1 //修改hostname …...
网际协议IP
网际协议IP 文章目录网际协议IP[toc]虚拟互联网IP地址及其表示方法分类IP地址(两级)无分类编址 CIDR网路前缀地址块地址掩码子网划分(三级IP地址)IP地址和MAC地址地址解析协议ARPIP数据报的格式IP数据报首部的固定部分中的各字段IP数据报首部的可变部分分…...
Python 语言参考手册、教程、标准库
官方文档:https://docs.python.org/zh-cn/3.11/ Python 语言参考手册 介绍了 Python 句法与“核心语义”。在力求简明扼要的同时,我们也尽量做到准确、完整。有关内置对象类型、内置函数、模块的语义在 Python 标准库 中介绍。有关本语言的非正式介绍&am…...
数据库连接池 BoneCP、HikariCP 等
文章目录 数据库连接池 BoneCP、HikariCP 等BoneCPDruidTomcat Jdbc PoolHikariCPC3p0DbcpLRUPSCachePS数据库连接池 BoneCP、HikariCP 等 BoneCP 官方说法 BoneCP 是一个高效、免费、开源的 Java 数据库连接池实现库 设计初衷就是为了提高数据库连接池性能,根据某些测试数…...
博客系统 SSM 超强硬核良心推荐之第一弹 - 预备工作
硬核 ! 从 0 到 1 完美实现 SSM 版本的博客系统 , 学会保准不吃亏!一 . SSM 版本相比于 Servlet 版本的亮点二 . 初始化数据库三 . 前端页面3.1 注册页面3.2 登录功能3.3 文章总列表页3.4 自己的文章列表页3.5 文章详情页3.6 编写博客页面大家好 , 这是新的专栏 , 博客系统 SSM…...
[Web] 简单瀑布流布局实现
目前的纯 CSS 布局, 是没办法实现比较完美的瀑布流布局的. 参考: CSS总结:瀑布流布局 - 黑白程序员 我使用 JS CSS, 并且自动布局实现了较为简单, 观赏性好的瀑布流布局. 代码 HTML: <!DOCTYPE html> <html lang"en"> <head><link rel&quo…...
多线程之死锁,哲学家就餐问题的实现
1.死锁是什么 死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。 2.哲学家就餐问题 有五个哲学家,他们的生活方式是交替地进行思考和进餐…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
