MySQL视图

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

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

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

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

一、什么是视图?

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

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

视图 vs 普通表

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

二、视图的基本操作

1.创建视图

2.查询视图

3.查看视图定义

4.修改和删除视图

1.修改

2.删除

三、视图的更新操作

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

可更新视图的条件

视图必须满足以下条件才能执行 INSERT、UPDATE、DELETE:

  1. 视图基于单张表(没有 JOIN)
  2. 视图中包含基表的所有非空且无默认值的列
  3. 没有使用聚合函数(SUM、AVG、COUNT 等)
  4. 没有使用 DISTINCT、GROUP BY、HAVING
  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 聚合阅读