news 2026/6/2 15:59:05

【MYSQL】视图--详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【MYSQL】视图--详解

一.视图定义

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。

二.基本使用

  • 创建视图

语法:

create view 视图名 as select语句;

在bash中我们看不见myview.frm,但是在mysql5.7中可以看到如下:

1. 为什么看不到myview.frm了?

在 MySQL 5.7 及更早版本中,每个视图和表都会以视图名.frm的形式单独存放在数据库目录下。但从 MySQL 8.0 开始,所有关于表、列、视图等结构的元数据,都被统一存储在了由 InnoDB 存储引擎管理的“数据字典”表中。

官方文档明确指出,.frm文件已被移除,其内容现在全部存储在数据字典表里。所以,在/var/lib/mysql/test_db/目录下找不到myview.frm是 MySQL 8.0 的预期行为。

2. 在 MySQL 8.0 中如何查看视图信息?

既然文件里看不到了,就需要通过 SQL 命令来查询这个中央数据字典。你之前的ls方法不再适用,请改用以下mysql命令行客户端里的 SQL 命令:

首先,登录到 MySQL 命令行:

mysql -u root -p

然后,执行以下任一 SQL 语句查看视图定义:

  • 方法一:使用SHOW CREATE VIEW(最常用,信息最清晰)
    这个命令会完整地显示创建myview这个视图的 SQL 语句。

    USE test_db; SHOW CREATE VIEW myview;
  • 方法二:查询INFORMATION_SCHEMA数据库
    INFORMATION_SCHEMA是 MySQL 提供的一个标准化的元数据视图,你可以像查普通表一样查它。

    -- 查看视图的定义语句 SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = 'test_db' AND TABLE_NAME = 'myview'; -- 查看视图的创建选项 SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = 'test_db' AND TABLE_NAME = 'myview'\G

视图好处:

1. 降低查询复杂度,提升开发效率
视图可以将复杂的多表关联查询(如查询某人的部门名称)封装为一张“虚拟表”。开发人员或报表系统查询时,无需重复编写复杂的JOIN逻辑,只需SELECT * FROM user_dept_view即可,显著简化了代码,减少了出错几率。

2. 提供逻辑数据独立性,屏蔽底层变更
即使底层原始表结构发生变化(例如字段重命名、分表存储),只要视图的定义不变,上层应用程序的查询代码就无需任何修改。这大大降低了因数据库重构导致的应用代码改造成本。

3. 利用查询改写与缓存,提升高频访问性能
虽然视图本身不存数据,但数据库优化器可以对视图进行查询改写。对于高频访问且变化不频繁的聚合结果(如某部门的人数统计),结合物化视图(或数据库内置的查询缓存)可以大幅降低原始表的计算压力,实现“以空间换时间”。

  • 修改了视图,对基表数据有影响

  • 修改了基表,对视图有影响

  • 删除视图

语法:

drop view 视图名;

在MySQL5.7下看结构被删除了

查不到myvie了

三.视图规则和限制

  • 与表一样,必须唯一命名(不能出现同名视图或表名)
  • 创建视图数目无限制,但要考虑复杂查询创建为视图之后的性能影响
  • 视图不能添加索引,也不能有关联的触发器或者默认值
  • 视图可以提高安全性,必须具有足够的访问权限
  • order by 可以用在视图中,但是如果从该视图检索数据 select 中也含有 order by ,那么该视图中的 order by 将被覆盖
  • 视图可以和表一起使用

补充一些方面:

  • 命名与结构
  1. 必须唯一命名(不能与表或其他视图重名)
  2. 创建数目无限制,但性能需评估
  3. 视图可以与其他表/视图联合查询
  • 索引与性能
  1. 视图不能建索引
  2. 不能有关联的触发器或默认值
  3. 包含聚合/GROUP BY/DISTINCT/UNION/子查询的视图强制使用 TEMPTABLE 算法
  4. 视图嵌套超过3层会显著影响性能
  • 数据修改限制(只读视图) 以下情况视图不可更新:
  1. 包含聚合函数、DISTINCT、GROUP BY、HAVING
  2. 包含 UNION / UNION ALL
  3. FROM 子查询(派生表)
  4. 某些类型的子查询
  • 安全与权限
  1. 视图可用于隐藏敏感字段(安全)
  2. 必须拥有 SELECT 权限才能创建视图
  3. WITH CHECK OPTION 可防止插入不符合视图条件的数据
  • ORDER BY 规则
  1. 视图内的 ORDER BY 可能被外层查询覆盖
  2. 如果视图内有 LIMIT,ORDER BY 不会被覆盖
  • 维护风险
  1. 底层表结构变更可能导致视图失效
  2. 定期检查视图有效性:`INFORMATION_SCHEMA.VIEWS`
  • MySQL 与其他数据库差异

MySQL 不支持物化视图、索引视图、参数化视图、视图触发器

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/2 15:58:07

基于树莓派的智能生态箱:从传感器到Web控制的完整IoT项目实践

1. 项目概述:打造一个会“思考”的生态箱养过爬宠的朋友都知道,维持一个稳定的生态环境有多费心。温度低了,龟龟不爱动;湿度不够,蛇蛇蜕皮困难。以前我养两只陆龟的时候,每天得掐着点开加热灯、喷水加湿&am…

作者头像 李华
网站建设 2026/6/2 15:58:02

Arduino互动装置实战:超声波与光敏传感器打造智能感应鬼书

1. 项目概述与核心思路如果你对Arduino和传感器编程感兴趣,想做一个既有技术含量又有趣味的互动装置,那么这个“智能感应鬼书”项目绝对值得一试。它本质上是一个融合了硬件、软件和手工制作的创客项目,核心是利用超声波传感器和光敏电阻&…

作者头像 李华
网站建设 2026/6/2 15:57:56

基于Raspberry Pi与SGP30的室内TVOC监测与语音提醒系统实现

1. 项目概述:为什么我们需要一个会“说话”的空气质量管家?如果你和我一样,每天有超过70%的时间是在室内度过的——无论是居家办公、休息,还是在厨房里准备一日三餐——那么,你很可能正在无意识地暴露在一种看不见的健…

作者头像 李华
网站建设 2026/6/2 15:57:08

用Arduino打造儿童习惯养成系统:从电路搭建到代码实现的亲子创客项目

1. 项目概述:用电子积木搭建习惯养成系统在陪伴孩子成长的过程中,如何让他们主动、快乐地完成每日任务,是很多家长面临的共同挑战。说教和催促效果有限,而纯粹的游戏奖励又容易让目标失焦。作为一名长期混迹于创客社区、也身为人父…

作者头像 李华
网站建设 2026/6/2 15:52:38

一屏透明化三维立体重构安全信息哪家好

当安防领域的概念层出不穷,传统监控系统依旧存在“各系统各自为战、数据孤岛、空间信息缺失”的顽疾。我们经常听到客户抱怨:“几十个监控画面看不过来,一旦发生突发情况,根本无法在第一时间掌握全局。” 痛点太真实了——智慧城市…

作者头像 李华
网站建设 2026/6/2 15:52:36

跨镜无缝轨迹续联智慧工厂一屏透明化人防监测预警及AI预案

在当今科技飞速发展的时代,智慧工厂成为了制造业转型升级的重要方向。然而,传统工厂面临着各种系统和数据分散无法互通、三维空间信息缺失等诸多问题,严重影响了工厂的管理效率和安全保障。北京黎阳之光科技有限公司(以下简称“黎…

作者头像 李华