MySQL视图

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

在日常数据库开发中,我们经常遇到这样的需求:多个业务模块需要查询同一份数据,但每个模块关注的字段不同;或者某些敏感字段需要隐藏,不能让所有用户都看到。这时候,视图(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:视图和存储过程的区别?

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

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

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

Q4:MySQL 有物化视图吗?

原生不支持。

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

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

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
倔强的石头_1 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
云技纵横1 天前
唯一索引 INSERT 死锁实战:5 秒复现交叉插入的 S 锁循环等待
sql·mysql
沉默王二1 天前
面试官:RAG 不用向量数据库,用 MySQL 硬扛?我:100 万向量不是很轻松?
mysql·面试·ai编程
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
冬奇Lab2 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
小猿姐2 天前
MySQL Top 10 热点问题 AI 运维实战:从内核诊断到云原生运维
mysql·云原生·aiops
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
ClouGence2 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle