MYSQL九、MYSQL的视图的认识

news2024/12/25 4:11:54

视图

  1. 视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在。行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。
    • 视图只保存了查询的SQL逻辑,不保存查询结果。
    • 在创建视图的时候,主要研究创建视图的这条SQL查询语句。

1、视图的语法

  • 创建视图
    • 语法:
# 创建语法
CREATE   [OR REPLACE]   VIEW  视图名称[(列名列表)]   AS   SELECT语句   [ WITH [ CASCADED  |  LOCAL ]  CHECK  OPTION ]

# or replace表示如果存在该名字的视图就替换到原来的视图

  • 创建视图例子:
-- 创建视图
create or replace view stu_view as select id,name from student where id <= 10;

-- 如果视图中存在stu_view视图,则直接替换,没有则创建新的视图
create or replace view stu_view as select id,name,no from student where id <= 20;
  • 修改视图
    • 语法:
# 方式一:
CREATE   [OR REPLACE]   VIEW  视图名称[(列名列表)]   AS   SELECT语句   [ WITH [ CASCADED  |  LOCAL ]  CHECK  OPTION ]
# 方式二:
ALTER   VIEW  视图名称[(列名列表)]   AS   SELECT语句   [ WITH [ CASCADED  |  LOCAL ]  CHECK  OPTION ]

  • 修改视图例子:
-- 修改stu_view视图
create or replace view stu_view as select id,name,no from student where id <= 20;

-- 直接修改视图stu_view
alter view stu_view as select id,name from student where id <= 10;
  • 查看视图
    • 语法:
# 查看创建视图语句:
SHOW  CREATE  VIEW  视图名称;

# 查看视图数据:
SELECT  *  FROM   视图名称 ...... ;
  • 查看视图例子:
# 查看视图stu_view的创建视图语句
show create view stu_view;

# 查看视图数据:
select * from stu_view;
  • 删除视图
    • 语法
DROP  VIEW  [IF EXISTS]   视图名称   [,视图名称]  ... 
  • 删除视图例子:
# 如果视图stu_view存在则删除视图
drop view if exists stu_view;

# 删除视图,如果不存在则报错
drop view stu_view;

2、通过视图进行插入数据

  • 向视图插入数据的操作,实际上会操作到定义视图的查询中使用的表
# 第一步首先创建一个视图
 create or replace view stu_v_1 as select id,name from student where id <= 10 ;

# 第二步:查看视图的数据
 select * from stu_v_1;

# 第三步:向视图插入数据(符合where条件的数据)
 insert into stu_v_1 values(6,'Tom');
 
# 第三步:向视图插入数据(不符合where条件的数据)
 insert into stu_v_1 values(17,'Tom22');
  • 执行上述的SQL,我们会发现,id为6和17的数据都是可以成功插入到student表上的。

    • 但是我们执行查询视图的时候,查询出来的数据,却没有id为17的记录。
      • 原因:在创建视图的时候,指定的条件为 id<=10, id为17的数据,是不符合条件的,所以没有查询出来,但是这条数据确实是已经成功的插入到了基表(student表)中。
  • 如果在定义视图时指定了条件,然后我们在插入、修改、删除数据时,应该做到必须满足条件才能操作,否则不能够操作。

    • 这需要借助于视图的检查选项

3、视图的检查选项

  1. 当使用with check option子句创建视图时,MySQL会通过视图检查正在更改的每个行,例如 插入,更新,删除,以使其符合视图的定义。
  2. MySQL允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。(即检查规则会递归上去,比如v3是依赖v2视图创建的,v2是依赖v1视图创建的,v1是基于某个表查询的视图,当我们向v3视图插入数据时,检查会从v3递归到v1的,但是需不需要满足条件才能进行操作需要看with check option的选项是cascaded还是local)
    • 为了确定检查的范围,mysql提供了两个选项:
      • CASCADED ( 默认值)
        • 即with check option 等于 with cascaded check option
      • LOCAL

cascaded(级联)

  1. 比如,v2视图是基于v1视图的,如果在v2视图创建的时候指定了检查选项为 cascaded,但是v1视图创建时未指定检查选项。 则在执行检查时,不仅会检查v2,还会级联检查v2的关联视图v1
    在这里插入图片描述
  • 当我们向v2视图插入数据时,不仅要检查v2的where条件,还要检查v1的where条件
    • 比如:当向v2视图插入一条数据时,先和v2视图的where条件进行比对:
      • 不符合v2视图的where条件则直接插入失败
      • 符合v2视图的where条件则再与v1视图的where条件进行比对,如果也符合则插入成功,如果不符合则也插入失败。

在这里插入图片描述

  • 当我们向v3视图插入数据时,因为v3没有定义检查选项,所以不会去检查v3的where条件,然后先去检查v2的where条件,再去检查v1的where条件
    • 比如:当向v3视图插入一条数据时,先和v2视图的where条件进行比对:
      • 不符合v2视图的where条件则直接插入失败
      • 符合v2视图的where条件则再与v1视图的where条件进行比对,如果也符合则插入成功,如果不符合则也插入失败。

LOCAL(本地)

  1. 比如,v2视图是基于v1视图的,如果在v2视图创建的时候指定了检查选项为 local ,但是v1视图创建时未指定检查选项。 则在执行检查时,只会检查v2,不会检查v2的关联视图v1
    在这里插入图片描述
  • 当我们向v3视图插入数据时,因为v3没有使用检查选项,所以不会去检查v3的where条件,然后先去检查v2的where条件,因为v2使用的检查选项是local,而且v1没有定义检查选项,所以不回去检查v1的where条件
    • 比如:当向v3视图插入一条数据时,先和v2视图的where条件进行比对:
      • 不符合v2视图的where条件则直接插入失败。
      • 符合v2视图的where条件则插入成功。

4、视图的更新

  1. 要使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系
  2. 如果视图包含以下任何一项,则该视图不可更新
    • 聚合函数或窗口函数(SUM()、 MIN()、 MAX()、 COUNT()等)
    • DISTINCT
    • GROUP BY
    • HAVING
    • UNION 或者 UNION ALL

5、视图的作用

  • 1). 简单:视图不仅可以简化用户对数据的理解,也可以简化它们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
  • 2). 安全:对于数据库的操作,可以对用户进行授权,通过数据库的授权来决定每一个登录的用户能够操作哪些数据库,能够看到哪些数据库,能够看到哪些表,能够操作哪些表,但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据。
  • 3). 数据独立:视图可帮助用户屏蔽真实表结构变化带来的影响。(假如基表的某个字段发生了变化,那么我们可以针对视图进行一个更新操作,给修改的字段添加一个别名(和原来的一样),这样就屏蔽了基表的变化对业务的影响)。

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

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

相关文章

Delphi-2M:基于病史预测未来健康的改进GPT架构

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

一份日本 AWS Summit 的前线快报

5月底刚参加完 AWS 中国 Summit「这次的上海 AWS Summit 好玩的有点过分」&#xff0c;后来网翻官不经意间看到 6 月 AWS 还会在日本举办一场 Summit。正好最近公司也签下了几个日本客户&#xff0c;眼看着 5 年签证也即将到期&#xff0c;于是心一横&#xff0c;决定东渡扶桑。…

快速上手 Spring Boot:基础使用详解

快速上手 Spring Boot&#xff1a;基础使用详解 文章目录 快速上手 Spring Boot&#xff1a;基础使用详解1、什么是SpringBoot2、Springboot快速入门搭建3、SpringBoot起步依赖4、SpringBoot自动配置&#xff1a;以tomcat启动为例5、SpringBoot基础配置6、yaml7、多环境开发配置…

移动硬盘恢复数据要多久 4T移动硬盘数据恢复一般多少钱

在日常工作中&#xff0c;移动硬盘是非常实用的一种数据文件存储设备&#xff0c;在大数据存储上是有极强的优势的&#xff0c;不过移动硬盘有时候也会出现数据丢失的情况。接下来给大家详细讲解&#xff0c;移动硬盘恢复数据要多久&#xff0c;以及4T移动硬盘数据恢复一般多少…

当你在浏览器输入一个地址

你在浏览器中输出了一个地址&#xff0c;回车后&#xff0c;一直到显示页面&#xff0c;中间经历了哪些过程 &#xff1f; 1. 用户输入 URL 并按下回车 用户在浏览器的地址栏中输入一个 URL&#xff08;例如 http://example.com&#xff09;并按下回车键。 2. DNS 解析 浏览…

【机器学习】自然语言处理(NLP)领域革命性突破的模型——Transformer

目录 引言 自注意力机制介绍 生成Query、Key和Value向量 模型结构与实现 在自然语言处理中的应用 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 &#x1f440;引言 &#x1f440;在自然语言处理领域&#xff0c;传统的循环神经网络和长短时记忆网络虽然取得了一定的成…

linux 登录ftp报Received message too long 1416128883

在linux 登录ftp报Received message too long 1416128883 [rootlocalhost ~]# sftp oaftp172.20.xx.xx解决办法&#xff1a; [rootlocalhost ~]# usermod -s /bin/bash oaftp[rootlocalhost ~]# systemctl restart vsftpd.service[rootlocalhost ~]# sftp oaftp172.20.xx.xx完…

【TB作品】stm32单片机,红外遥控器,温控风扇,模拟空调,PWM风扇

空调机 硬件&#xff1a;stm32、oled显示器、ds18b20温度传感器、风扇驱动和风扇、红外接收器、遥控器 软件功能&#xff1a; &#xff08;1&#xff09;显示室内温度 &#xff08;2&#xff09;显示当前模式&#xff1a;常态、除湿、通风 &#xff08;3&#xff09;显示当前风…

昇思25天学习打卡营第6天 | 函数式自动微分

神经网络的训练主要使用反向传播算法&#xff0c; 模型预测值&#xff08;logits&#xff09;与正确标签&#xff08;label&#xff09;送入损失函数&#xff08;loss function&#xff09;获得loss&#xff0c; 然后进行反向传播计算&#xff0c;求得梯度&#xff08;gradie…

Kubernetes 中 ElasticSearch 中的 MinIO 审核日志

无论您是在本地还是在云中&#xff0c;您都希望确保以同构的方式设置工具和流程。无论在何处访问基础结构&#xff0c;您都希望确保用于与各种基础结构进行交互的工具与其他区域相似。 考虑到这一点&#xff0c;在部署您自己的 MinIO 对象存储基础架构时&#xff0c;深入了解您…

【Python】已解决:urllib模块设置代理ip

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;urllib模块设置代理ip 一、分析问题背景 在使用Python的urllib模块进行网络请求时&#xff0c;有时我们需要通过代理服务器来发送请求&#xff0c;以达到隐藏真…

python中的<class ‘complex‘>

一般编程里面不怎么会讲&#xff0c;但是还是挺强大的一个类。 在 Python 中&#xff0c;<class complex> 表示复数类型。复数是一种包含实部和虚部的数学数&#xff0c;可以用 a bj 的形式表示&#xff0c;其中 a 表示实部&#xff0c;b 表示虚部&#xff0c;j 是虚数…

2024年广西三支一扶报名详细流程(附报名照处理流程)​

2024年广西将招募1650名高校毕业生到基层从事支农、支医、支教和帮扶乡村振兴工作&#xff08;简称“三支一扶”&#xff09;。 招募对象为全日制普通高校应届及择业期内2022年至2024年毕业的全日制普通高校毕业生。 ➡️招募条件。 1.具有全日制大专&#xff08;含高职高专&am…

【C++题解】1058 - 求出100至999范围内的所有水仙花数。

问题:1058 - 求出100至999范围内的所有水仙花数。 类型&#xff1a;简单循环 题目描述&#xff1a; 所谓水仙花数&#xff0c;就是指各位数字立方之和等于该数的数&#xff1b;a^3 称为 a 的立方&#xff0c;即等于 aaa 的值。 例如&#xff1a;因为 15313533^3 &#xff0c;…

【JavaEE 进阶(六)】Mybatis操作数据库

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多进阶知识 目录 1.前言2.JDBC操作3.Mybatis3.1Mybatis入门3.1.1准备工作3.1.2配置数据库连接3.1.2写持久…

13 物理层介质及设备

物理层介质及设备 一、线缆的连接 &#xff08;一&#xff09;线序 ​ 线序&#xff1a; RJ-45连接头12345678568A绿白绿橙白蓝蓝白橙棕白棕568B橙白橙绿白蓝蓝白绿棕白棕 ​ 1、2发送&#xff0c;3、6接收 &#xff08;二&#xff09;线缆的应用 1.线缆的连接 ​ 标准…

OpenHarmony 5.0 纯血鸿蒙系统

OpenHarmony-v5.0-Beta1 版本已于 2024-06-20 发布。 OpenHarmony 5.0 Beta1 版本标准系统能力持续完善&#xff0c;ArkUI 完善了组件通过 C API 调用的能力&#xff1b;应用框架细化了生命周期管理能力&#xff0c;完善了应用拉起、跳转的能力&#xff1b;分布式软总线连接能力…

MindManager2024思维导图软件重磅发布更新!

大家好啊&#xff01;&#x1f44b; 今天我超级激动要分享给大家一款改变我工作和学习方式的工具——MindManager2024思维导图软件&#xff01;这可不仅仅是个工具哦&#xff0c;它更像是我的私人思维助手&#xff0c;帮我整理思绪&#xff0c;规划时间&#xff0c;还能激发创新…

HTML+CSS 3D旋转登录表单

效果演示 实现了一个具有3D旋转效果的登录框&#xff0c;背景为太空图片&#xff0c;登录框位于太空中心&#xff0c;可以通过输入用户名和密码进行登录。登录框使用了CSS3的3D变换和动画效果&#xff0c;使其具有立体感和动态效果。同时&#xff0c;登录框的样式也经过精心设计…

TMC2209驱动模式详解

TMC2209驱动模式详解 1.TMC2209封装2.TMC2209引脚定义 1.TMC2209封装 2.TMC2209引脚定义