MySQL视图

作者:Halvmån日期:2026/5/10

我们上一篇博客也讲到了视图,但是我们今天要学的这个视图并不是上篇博客的视图。

在日常数据库开发中,我们经常遇到这样的需求:多个业务模块需要查询同一份数据,但每个模块关注的字段不同;或者某些敏感字段需要隐藏,不能让所有用户都看到。这时候,视图(View) 就成了一个非常优雅的解决方案。

很多人刚开始接触视图时,会觉得它像一个“虚拟表”或者“保存好的查询语句”。本文将从实际开发的角度,带你全面掌握 MySQL 视图的使用。

一、什么是视图?

视图是一个虚拟表,它不存储实际数据,而是存储一条 SELECT 语句。当你查询视图时,MySQL 会执行这条 SELECT 语句并返回结果。

一句话理解:视图就是给一条复杂的查询语句起个名字,然后像操作普通表一样使用它。

视图 vs 普通表

特性普通表视图
存储数据存储不存储
占用空间占用磁盘几乎不占用
数据实时性静态动态(实时查询基表)
可以建索引可以不可以(但基表索引有效)
可以增删改可以有限制

二、视图的基本操作

1.创建视图

2.查询视图

3.查看视图定义

4.修改和删除视图

1.修改

2.删除

三、视图的更新操作

很多人认为视图是只读的,其实部分视图支持更新,但这个更新会直接影响基表。

可更新视图的条件

视图必须满足以下条件才能执行 INSERTUPDATEDELETE

  1. 视图基于单张表(没有 JOIN)
  2. 视图中包含基表的所有非空且无默认值的列
  3. 没有使用聚合函数(SUMAVGCOUNT 等)
  4. 没有使用 DISTINCTGROUP BYHAVING
  5. 没有使用子查询、UNION

发现主表里面CLARK也变成了clark了

四、性能注意事项

7.1 视图不会提升性能

视图本质是一个宏替换(MERGE 算法)或临时表(TEMPTABLE 算法),不会自动缓存结果。每次查询视图都会重新查询基表。

常见问题 Q&A

Q1:视图能建索引吗?

不能。但基表的索引对视图查询有效。如果视图查询很慢,考虑优化基表的索引或使用物化视图(MySQL 不支持原生物化视图,可用表模拟)。

Q2:视图和存储过程的区别?

视图存储过程
返回结果返回表(结果集)可返回多个结果集
参数不支持支持输入/输出参数
使用方式像表一样 SELECTCALL 调用
嵌套可在查询中嵌套不能直接在查询中用

Q3:视图中的数据会过期吗?

视图总是查询实时数据(除非用 TEMPTABLE 算法,但也不会自动刷新)。想缓存数据快照,需要自己建表并定期刷新。

Q4:MySQL 有物化视图吗?

原生不支持。

视图是 MySQL 中一个轻量而强大的工具,它不能替代表,但在查询简化、权限控制和逻辑抽象方面有着独特的价值。理解它的本质——存储的查询语句——就能更好地把握何时使用、如何使用。

希望这篇文章能帮助你全面掌握 MySQL 视图。如果你在实际项目中遇到了视图相关的有趣问题,欢迎留言交流,可以私信me哦~~~


MySQL视图》 是转载文章,点击查看原文


相关推荐


Linux 线程同步与互斥(六) 线程安全与重入问题,死锁,线程done
codeacac2026/4/30

目录 一、线程安全与重入问题 概念 线程安全 重入 多线程重入函数 信号导致的重入 可重入与线程安全的联系 可重入与线程安全的区别 二、死锁 概念 造成死锁的4个必要条件 避免死锁的做法: 三、STL, 智能指针和线程安全 四、总结 一、线程安全与重入问题 概念 线程安全 线程安全就是当多个线程同时访问同一块资源(如全局变量、任务队列、打印终端)时,最终结果能符合预期,不会出现数据错乱、逻辑错误,这就是线程安全。 我们可以结合上一篇线程池的代码


把 Git 提交历史变成一条流动的河——Project River
仿生狮子2026/4/22

是什么 你有没有好奇过一个开源项目十年的贡献者活动长什么样?谁一直在写代码?谁是后来加入的?版本大升级时社区发生了什么变化? 我做了 Project River,一个 Git 历史可视化工具——输入一个 Git 仓库,能把每位贡献者的提交活动渲染成随时间流动的河流图(Streamgraph)。 项目地址:github.com/Lionad-Moro… 在线体验:lionad-morotar.github.io/project-riv… 直接看效果: 河流越宽,说明当天的提交越多。每条色带


React性能优化
whuhewei2026/4/13

React应用在复杂场景下容易出现渲染性能瓶颈,合理优化能显著提升用户体验。React性能优化手段的核心在于减少不必要的渲染、控制资源加载和合理使用缓存机制。 1. 使用 React.memo 避免子组件无意义重渲染 当父组件更新时,即使子组件props未变,也会默认重新渲染。React.memo可缓存组件输出,仅在props变化时重新更新。 示例Demo: import React, { useState } from "react"; const ExpensiveComponen


PHP $_GET 变量详解
froginwe112026/4/5

PHP $_GET 变量详解 引言 PHP $_GET 变量是 PHP 中用于处理 URL 查询字符串参数的一个内置数组。在 Web 开发中,$_GET 变量经常用于收集来自表单的数据或者从 URL 中提取信息。本文将详细介绍 PHP $_GET 变量的基本用法、操作方法和注意事项。 一、$_GET 变量简介 在 PHP 中,$_GET 是一个超级全局变量,用于存储通过 URL 传递的参数。这些参数以名值对的形式出现在 URL 中,如 http://www.example.com/?ke


go实战案例:如何基于 Consul 给微服务添加服务注册与发现?
五年小兵勇闯互联网2026/3/27

在单体应用向微服务架构演进的过程中,原本的巨石型应用会按照业务需求被拆分成多个微服务,每个微服务会提供特定的功能,并可能依赖于其他的微服务。每个微服务实例都可以动态部署,服务实例之间的调用通过轻量级的远程调用方式(HTTP、消息队列等)实现,它们之间通过预先定义好的接口进行访问。         由于服务实例是动态部署的,每个服务实例的地址和服务信息都可能动态变化,这就势必需要一个中心化的组件对各个服务实例的信息进行管理,该组件管理了各个部署好的服务实例元数据,包括服务名、IP地址、端口号、服务


VMware虚拟机CentOS磁盘扩容完整指南(解决growpart报错 & LVM扩容)
Microi风闲2026/3/19

文章目录 前言✨一、环境与背景二、第一阶段:VMware 层面扩容三、第二阶段:CentOS 系统内部扩容方法一:标准LVM扩容流程(推荐)方法二:解决 growpart 报错方案(备用) 四、总结与注意事项 前言✨ 在日常开发和运维中,我们经常遇到 VMware 虚拟机磁盘空间不足的问题。本文记录了如何为一台正在运行的 CentOS 7 虚拟机安全地扩容磁盘空间的全过程。本次操作不仅涵盖了标准的扩容步骤,还重点解决了实际操作中可能遇到的两个关键问题: growpart


OpenClaw实战-NAS配置从0到1详细教程及踩坑记录
可夫小子2026/3/11

💡 大家好,我是可夫小子,关注AI编程、AI自动化和自媒体。 背景 我去年在自己Macbook上就已经安装了Openclaw了,当时基本就是一行命令,比较顺利。经过这两个月,Openclaw版本经历了很多更新,当时的安装教程有些过时了。最近,我需要在一台群晖的Nas部署Openclaw,硬是花了两天时间才完成。我把整个详细的部署过程,一些踩坑经历用图文记录下来,就有这篇包含30多张截图的图文。 方案说明 在Nas安装Openclaw,主要有三种方案来实现 直接通过官方脚本,安装到Nas物


NineData 迁移评估功能正式上线
NineData2026/3/3

做过数据库迁移的人,应该都有过类似经历:明明方案写得挺好,时间排得也挺满,但心里一直不踏实。因为真正的问题,往往不是工具能不能迁,而是迁过去以后还能不能跑。 NineData 这次做的迁移评估功能,本质上就只做一件事:提前把不确定性拆开,摊在你面前。 NineData 的一份体检报告,把风险摊在桌面上 异构迁移真正需要关注的是:要改多少?哪些能改?哪些根本不能动? 下面来列一列 NineData 能做哪些事情。 一、对象兼容性评估:哪些能直接迁,哪些一定要改 系统会自动分析源库和目标库的对象差异


AI 系统架构
lizhongxuan2026/2/23

AI 系统看起来很复杂,但核心可以压缩成三句话: 尽量少搬数据:很多时候不是算不动,而是数据搬运太慢。 尽量提高有效计算密度:让硬件更多时间在做有价值的乘加计算。 尽量重叠计算与通信:训练和推理都要避免“设备空等”。 换句话说,AI 性能问题本质上是 计算(Compute)+ 访存(Memory)+ 通信(Communication) 的协同问题。 1. AI 系统栈 层级主要职责典型问


Flutter三方库适配OpenHarmony【apple_product_name】异步调用与错误处理
淼学派对2026/2/14

前言 欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net 本文将围绕 apple_product_name 的实际 API,从 Future 基础到全局错误兜底,给出一套完整的异步调用与错误处理方案。 先给出结论式摘要: 所有 API 返回 Future:getMachineId()、getProductName()、lookup() 都是异步的,必须 await 或 .then()三类异常要分层捕获:PlatformExc

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 XYZ博客