Oracle对象——视图之简单视图与视图约束

news2024/11/28 0:39:06

文章目录

  • 什么是视图
  • 为什么会使用视图
  • 视图语法
  • 案例
    • 简单视图的创建
    • 更改数据基表,视图数据会变化么?
    • 更改视图数据,基表数据会变更么?
    • 带检查约束的视图
      • 结论
    • 创建只读视图(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操作。

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

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

相关文章

【项目精选】高校固定资产管理系统(论文+视频+源码)

点击下载源码 随着计算机信息技术的发展以及对资产、设备的管理科学化、合理化的高要求,利用计算机实现设备及资产的信息化管理已经显得非常重要。 固定资产管理系统是一个单位不可缺少的部分。但一直以来人们使用传统的人工方式管理固定资产的信息,这种…

C++STL剖析(六)—— set和multiset的概念和使用

文章目录🌟 前言🍑 树型结构和哈希结构🍑 键值对1. set的介绍和使用🍑 set的模板参数列表🍑 set的构造🍑 set的使用🍅 insert🍅 find🍅 erase🍅 swap&#x1…

Java基础之异常

目录1 异常1.1 异常的概述1.2 常见异常类型1.3 JVM的默认处理方案1.4 编译时异常的处理方式1.4.1 异常处理之 try ... catch ... [ktʃ](捕获异常)1.4.2 异常处理之 throws(抛出异常)1.5 Throwable 的成员方法1.6 编译时异常和运行…

H5 抽奖页面

好久之前就想去写一个这样的示例了,然后就忘了…😵 😀效果 🖇在线链接 https://linyisonger.github.io/H5.Examples/?name./34.%E6%8A%BD%E5%A5%96%E9%A1%B5%E9%9D%A2.html 🚧 图片可能会丢失,都是在网…

大尺度衰落与小尺度衰落

一. 大尺度衰落 无线电磁波信号在收发天线长距离(远大于传输波长)或长时间范围发生的功率变化,称为大尺度衰落,一般可以用路径损耗模型来描述,路径损耗是由发射功率在空间中的辐射扩散造成的,根据功率传输…

Hadoop开启Yarn的日志监控功能

1.开启JobManager日志 &#xff08;1&#xff09;编辑NameNode配置文件${hadoop_home}/etc/hadoop/yarn-site.xml和mapred-site.xml 编辑yarn-site.xml <!-- Site specific YARN configuration properties --> <configuration><property><name>yarn.…

如何排查网页在哪里发生了内存泄漏?

今天我们来学习用 devtool 的 Performance 和 Memory 工具来找出网页哪里发生了内存泄漏。 Performace 面板 首先我们打开浏览器的 devtool&#xff0c;选择 Performance&#xff08;性能&#xff09;面板&#xff0c;然后将 Memory 选项勾选上。不勾选的话&#xff0c;就不会…

火爆全网的ChatGPT,可以自己上手搭建了。

没有人不知道ChatGPT了吧&#xff1f; ChatGPT&#xff0c;发布于2022年11月30日&#xff0c;来自人工智能研究实验室OpenAI&#xff0c;是一款全新聊天机器人模型&#xff0c;一款人工智能技术驱动的自然语言处理工具。 5天用户破百万&#xff0c;2个月活跃用户破亿。ChatGP…

大学生常用python变量和简单的数据类型、可迭代对象、for循环的3用法

文章目录变量和简单的数据类型下划线开头的对象删除内存中的对象列表与元组debug三酷猫钓鱼记录实际POS机小条打印使用循环找乌龟可迭代对象&#x1f4d7;理解一&#x1f4d8;理解二2️⃣什么是迭代器✔️注意3️⃣迭代器对象4️⃣有关迭代的函数for循环的3用法&#x1f338;I …

C++ 算法主题系列之贪心算法的贪心之术

1. 前言 贪心算法是一种常见算法。是以人性之念的算法&#xff0c;面对众多选择时&#xff0c;总是趋利而行。 因贪心算法以眼前利益为先&#xff0c;故总能保证当前的选择是最好的&#xff0c;但无法时时保证最终的选择是最好的。当然&#xff0c;在局部利益最大化的同时&am…

Seata-Server分布式事务原理加源码 (五) - Seata配置Nacos注册中心和配置中心

Seata配置Nacos注册中心和配置中心 Seata支持注册服务到Nacos&#xff0c;以及支持Seata所有配置放到Nacos配置中心&#xff0c;在Nacos中统一维护&#xff1b; 高可用模式下就需要配合Nacos来完成 具体配置如下 注册中心 Seata-server端配置注册中心&#xff0c;在registr…

【Android学习】下载jar慢和gradle慢的情况

目录 问题出现的原因 解决方法 解决Gradle下载问题&#xff1a;手动安装 解决jar包下载慢问题&#xff1a;更改下载源 问题出现的原因 国内访问谷歌被墙导致访问速度慢或者干脆无法下载 解决方法 解决Gradle下载问题&#xff1a;手动安装 访问官网Gradle | Release Candi…

配置可视化-基于form-render的无代码配置服务(一)

背景 有些业务场景需要产品或运营去配置JSON数据提供给开发去使用&#xff08;后面有实际业务场景的说明&#xff09;&#xff0c;原有的业务流程&#xff0c;非开发人员&#xff08;后面直接以产品指代&#xff09;把数据交给开发&#xff0c;再由开发去更新JSON数据。对于产…

【LeetCode】打家劫舍 III [M](递归)

337. 打家劫舍 III - 力扣&#xff08;LeetCode&#xff09; 一、题目 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为 root 。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“房子与之相连。一番侦察之后&#xff0c;聪明的小偷意识…

山东大学2022操作系统期末

接力&#xff1a;山东大学2021操作系统期末 2022—2023山东大学计算机操作系统期末考试回忆版 简答题(4 10 points) &#xff08;1&#xff09;用户态&#xff0c;核心态是什么 &#xff08;2&#xff09;这种区分对现代操作系统的意义 &#xff08;3&#xff09;printf(“…

基于RK3399+STM32+PID的四轴飞行器跟踪与控制系统设计

系统硬件的总体方案设计 要设计一款具有跟踪功能且飞行稳定的四轴飞行器跟踪系统&#xff0c;首先要保证系 统硬件平台的功能稳定。系统各模块具有不同功能&#xff0c;所以需要根据各模块功能与 性能&#xff0c;进行芯片的选取与硬件电路设计&#xff0c;使系统在经济性、生产…

优维低代码:Legacy Templates 构件模板

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 连载…

镜像恒流源电路分析

在改进型差动放大器中&#xff0c;用恒流源取代射极电阻RE&#xff0c;既为差动放大电路设置了合适的静态工作电流&#xff0c;又大大增强了共模负反馈作用&#xff0c;使电路具有了更强的抑制共模信号的能力&#xff0c;且不需要很高的电源电压&#xff0c;所以&#xff0c;恒…

Chatgpt取代客服?取代客服的其实另有其人

近来&#xff0c;一款聊天机器人ChatGPT刷爆全网&#xff0c;这也让不少人发出疑问&#xff1a;人工智能真的能大规模取代人类吗&#xff1f;其实&#xff0c;人工智能在很多行业比如电商、金融、医疗教育和制造业等领域已经有许多尝试和应用&#xff0c;最常见的就是大家在生活…

研报精选230214

目录 【行业230214艾瑞股份】中国增强现实&#xff08;AR&#xff09;行业研究报告【行业230214国信证券】信息安全深度剖析5&#xff1a;密评和信创双催化&#xff0c;密码产业开启从1到N【行业230214民生证券】磁性元器件深度报告&#xff1a;乘新能源之风&#xff0c;磁性元…