视图【MySQL】

文章目录

  • 概念
  • 操作视图
    • 创建视图
    • 查询视图
    • 更新视图
    • 删除视图
  • 视图规则和限制

概念

MySQL 中的视图(View)是一个虚拟表,其内容由查询定义。视图本身不包含数据,这些数据是从一个或多个实际表中派生出来的,通过执行视图定义中的 SQL 查询来动态呈现。使用视图可以有以下几个优点:

  1. 简化复杂的查询:通过将复杂的查询封装在视图中,用户可以通过简单地查询视图来获取需要的信息,无需编写复杂的 SQL 语句。
  2. 增强数据安全性:可以通过视图向用户展示所需的数据,同时隐藏表中的敏感或不相关的数据,从而限制对实际数据表的直接访问。
  3. 逻辑数据独立性:如果底层数据表的结构发生了变化(如添加或删除列),可以通过修改视图而不是修改依赖于这些表的应用程序代码来适应这些变化,这有助于减少维护成本。

操作视图

创建视图的基本语法如下:

CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

测试表:

image-20240227161226311

创建视图

创建视图首先会执行 SELECT 语句,用查询返回的结果作为视图的内容。

image-20240227161844683

用 SELECT 的返回值作为视图的数据,通过show tables可以查看视图是否被创建。

查询视图

一旦创建,就可以像查询普通表一样查询视图:

SELECT * FROM view_name;

更新视图

视图可以被更新(取决于视图的定义和所涉及的表)。如果视图定义允许,可以通过INSERTUPDATEDELETE操作来更改视图,这些更改会反映到底层的表中。但是,并非所有视图都是可更新的。

image-20240227162559507

修改视图后,原表中的记录也会随之被修改。反之也是如此。

这是因为视图的内容是随着原表内容动态更新的。

/var/lib/mysql/数据库名路径下,视图只有一个.frm文件,它值包含表结构的定义,而数据保存在.ibd文件中。这说明视图和原表共用同一份数据文件。这保证了数据一致性,视图往往用于显示和操作热数据。

image-20240227163118091

删除视图

删除视图的语法如下:

DROP VIEW view_name;

视图规则和限制

虽然视图在很多方面表现得像真实的表,但存在一些规则和限制:

  1. 更新规则:

    • 只有视图基于单一表时,才可能支持更新操作(INSERT、UPDATE、DELETE)。如果视图包含联合查询、分组操作或子查询,则可能不允许更新。
    • 对视图进行的更新操作必须不违反基表的任何约束。
  2. 算法限制:

    • 视图的处理可以使用 MERGE 或 TEMPTABLE 算法。MERGE 将视图查询与主查询合并,但如果视图包含某些类型的 SQL 结构(如 DISTINCT、GROUP BY、聚合函数、UNION 等),则不能使用 MERGE 算法,只能使用 TEMPTABLE 算法,后者将视图的结果放入临时表中。
  3. WITH CHECK OPTION:

    • 使用 WITH CHECK OPTION 创建视图时,对视图的所有更新(INSERT、UPDATE)将检查是否符合视图定义中的 WHERE 条件。如果更新的结果不符合条件,操作将被拒绝。这有助于保持数据的完整性。
  4. 定义限制:

    • 视图定义中不能包含 ORDER BY 子句,除非也使用了 LIMIT 子句。这是因为视图应该是无序的,以允许基于视图的查询自定义排序。
    • 视图不能索引,也不能有关联的触发器或默认值。
  5. 安全限制:

    • 视图可以作为权限控制的一种手段,因为它可以限制用户访问基表的某些列或行。但是,需要正确配置安全设置,以确保不会意外泄露敏感信息。
  6. 嵌套视图:

    • 视图可以基于其他视图定义,但过度嵌套可能会导致性能下降,因为 MySQL 需要解析和执行底层的所有视图查询。
  7. 性能考虑:

    • 使用视图可能会影响查询性能,特别是对于复杂的视图,因为执行视图查询时需要计算视图定义的查询。性能优化需要考虑基于视图的查询是否能够有效利用基表的索引。

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

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

相关文章

简单了解TCP/IP四层模型

什么是计算机网络? 计算机网络我们可以理解为一个巨大的城市地图,我们想从A地前往B地,其中要走的路、要避开的问题都交给计算机网络解决,直到我们可以正常的到达目的地,那么我们会把其中的过程抽象成一个网络模型&…

练习01-登录注册(简单)

一、用户登录/注册实现 综合前面学的知识来实现简单的注册登录功能 1.准备工作 注册登录页面 数据库,数据表 mybatis 坐标引入,MySQL驱动 配置 映射文件 用户实体类 Servlet代码 2.页面 不想手写的可以看博主IT黄大大【带源码】 【炫酷登录界…

吴恩达机器学习-可选实验室:可选实验:使用逻辑回归进行分类(Classification using Logistic Regression)

在本实验中,您将对比回归和分类。 import numpy as np %matplotlib widget import matplotlib.pyplot as plt from lab_utils_common import dlc, plot_data from plt_one_addpt_onclick import plt_one_addpt_onclick plt.style.use(./deeplearning.mplstyle)jupy…

机器学习——PPO补充

On-policy vs Off-policy 今天跟环境互动,并学习是on-policy 只是在旁边看,就是Off-policy 从p中选q个重要的,需要加一个weight p(x)/q(x) p和q不能相差太多 采样数太少导致分布差很多,导致weight发生变化 On-Policy -&g…

STM32F103 CubeMX ADC 驱动 PS2游戏摇杆控制杆传感器模块

STM32F103 CubeMX ADC 驱动 PS2游戏摇杆控制杆传感器模块 1. 工程配置1.1 配置debug口1.2 配置时钟1.3 配置ADC1.4 配置串口1.5 配置时钟1.6 生成工程 2. 代码编写2.1 串口代码2.2 ADC读取数据的代码 1. 工程配置 1.1 配置debug口 1.2 配置时钟 1.3 配置ADC 1.4 配置串口 1.5 …

小迪安全37WEB 攻防-通用漏洞XSS 跨站权限维持钓鱼捆绑浏览器漏洞

#XSS跨站系列内容:1. XSS跨站-原理&分类&手法 XSS跨站-探针&利用&审计XSS跨站另类攻击手法利用 XSS跨站-防御修复&绕过策略 #知识点: 1、XSS 跨站-另类攻击手法分类 2、XSS 跨站-权限维持&钓鱼&浏览器等 1、原理 指攻击者利用…

JavaWeb-Maven基础

Maven是专门用于管理和构建Java项目的工具,是 Apache 下的一个纯 Java 开发的开源项目,基于项目对象模型(POM)概念。先来学习一下Maven基础,等后面学完开发框架后再学Maven高级,这次的内容如下 一、概述 …

leetcode 热题 100_搜索二维矩阵

题解一: 二叉搜索树:从矩阵右上角观察,结构类似二叉搜索树,因此可以用类似的解法来做。具体做法是双指针从右上角开始,向左下角逐步搜索,如果当前值比目标值大,则向下移动,如果当前值…

体系班第十三节

1判断完全二叉树递归做法 有四种情况&#xff1a;1 左树完全&#xff0c;右数满&#xff0c;且左高为右高加一 2左满 &#xff0c;右满&#xff0c;左高为右高加一 3左满&#xff0c;右完全&#xff0c;左右高相等 4左右均满且高相等 #include<iostream> #include&l…

封装方法3

上一篇处理了单元格返回值改写 这一篇处理剩余普通方法返回值改写 已经给了Object的返回值&#xff0c;需要回调 //返回结果是22个单元格的值&#xff0c;怎么给调用方 Object value getCellValue(cell);没有给调用方的情况 value值内容是什么 处理ecxel-22个单元值的返回结…

重启 explorer 进程的正确做法(二)

重启资源管理器进程的方法不唯一&#xff0c;但长期以来大家对实施方法用的不到位。 在上一篇中我认为&#xff1a;“我们往往使用 TerminateProcess 并传入 PID 和特殊结束代码 1 或者 taskkill /f /im 等方法重启资源管理器( explorer.exe )&#xff0c;其实这是不正确的。我…

神经网络实战前言

应用广泛 从人脸识别到网约车&#xff0c;在生活中无处不在 未来可期 无人驾驶技术便利出行医疗健康改善民生 产业革命 第四次工业革命——人工智能 机器学习概念 机器学习不等价与人工智能20世纪50年代&#xff0c;人工智能是说机器模仿人类行为的能力 符号人工智能 …

DevOps本地搭建笔记(个人开发适用)

需求和背景 win11 wsl2 armbian(玩客云矿渣&#xff09;&#xff0c;构建个人cicd流水线&#xff0c;提高迭代效率。 具体步骤 基础设施准备 硬件准备&#xff1a;一台笔记本&#xff0c;用于开发和构建部署&#xff0c;一台服务器&#xff0c;用于日常服务运行。 笔记本…

C#,蛇梯问题(Snake and Ladder Problem)的算法与源代码

1 蛇梯问题 Snake and Ladder Problem 给定一个蛇梯板&#xff0c;找出从源单元格或第一个单元格到达目标单元格或最后一个单元格所需的最小掷骰次数。基本上&#xff0c;玩家可以完全控制掷骰子的结果&#xff0c;并希望找出到达最后一个单元格所需的最小掷骰次数。 如果玩…

【大厂AI课学习笔记NO.76】人工智能人才金字塔

人工智能领域&#xff0c;分为源头创新人才、产业研发人才、应用开发人才和实用技能人才。 人工智能领域的人才结构呈现多样化特点&#xff0c;主要可以分为源头创新人才、产业研发人才、应用开发人才和实用技能人才四大类。这四大类人才在人工智能领域的发展中各自扮演着不可或…

Day30:安全开发-JS应用NodeJS指南原型链污染Express框架功能实现审计

目录 环境搭建-NodeJS-解析安装&库安装 功能实现-NodeJS-数据库&文件&执行 安全问题-NodeJS-注入&RCE&原型链 案例分析-NodeJS-CTF题目&源码审计 开发指南-NodeJS-安全SecGuide项目 思维导图 JS知识点&#xff1a; 功能&#xff1a;登录验证&…

常见排序算法(C/C++)--- 动画演示

本篇将介绍一些常见的排序算法&#xff0c;如插入排序&#xff1a;直接插入排序、希尔排序&#xff1b;选择排序&#xff1a;选择排序、堆排序&#xff1b;交换排序&#xff1a;快速排序、冒泡排序&#xff1b;以及最后的归并排序。 对于以上的排序算法&#xff0c;我们总结了每…

VScode的列选

可以用来优化代码排布&#xff0c;让变量整齐成为一排 一、批量复制&#xff1a; 在1处左键单击&#xff0c;然后摁住SHIFTALT键的同时&#xff0c;左键单击2处&#xff0c;即可复制一整块的内容 如果所示 就可以复制了 二、批量输入 在1处左键单击&#xff0c;然后摁住SHI…

Day32:安全开发-JavaEE应用Servlet路由技术JDBCMybatis数据库生命周期

目录 JavaEE-HTTP-Servlet&路由&周期 JavaEE-数据库-JDBC&Mybatis&库 思维导图 Java知识点&#xff1a; 功能&#xff1a;数据库操作&#xff0c;文件操作&#xff0c;序列化数据&#xff0c;身份验证&#xff0c;框架开发&#xff0c;第三方库使用等. 框架…

RabbitMQ - 04 - Fanout交换机 (广播)

目录 部署demo项目 什么是Fanout交换机 实现Fanout交换机 1.控制台 声明队列 声明交换机 将交换机与队列绑定 2.编写消费者方法 3.编写生产者测试方法 部署demo项目 通过消息队列demo项目进行练习 相关配置看此贴 http://t.csdnimg.cn/hPk2T 注意 生产者消费者的…