当前位置: 首页 > news >正文

MySQL【视图】

在数据库学习中,我们经常会遇到一个概念:视图。其实,你可以简单地把视图理解为数据库里的“虚拟表”。其内容由查询定义 ,同真实的表一样 , 视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。

一、概念解析

想象一下,你有一张巨大的Excel表格(真实的数据表),里面存着几百列数据。但是,你平时工作只需要看其中的5列,或者需要把两张表的信息拼在一起看。

视图就是帮你解决这个问题的。它本质上是一个“存储起来的查询语句”。当你查询视图时,数据库会在后台自动执行那个查询语句,然后把结果展示给你。

核心特点:

  • 虚拟表:视图不直接存储数据,它只是保存了一条SQL规则。

  • 动态性:只要底层的真实数据表变了,你查询视图时,结果也会自动跟着变。

  • 双向影响:视图的数据变化会影响基表(原始表),基表的数据变化也会影响视图。

二、基本使用

2.1 创建视图:CREATE VIEW

create view 视图名 as select查询语句;

2.2实战案例:

-- 创建一个视图,用来展示员工姓名和他所在的部门名称 CREATE VIEW myview AS SELECT ename, dname FROM EMP, DEPT WHERE EMP.deptno = DEPT.deptno;
  • CREATE VIEW v_ename_dname AS:这是创建视图的命令。v_ename_dname是我们给视图起的名字。AS后面就是我们定义的规则。

  • SELECT ename, dname:我们只关心员工的姓名和部门名称,所以只选这两列。

  • FROM EMP, DEPT:数据来自EMP(员工表)和DEPT(部门表)两张表。

  • WHERE EMP.deptno = DEPT.deptno:这是连接条件。因为两张表都有部门编号,通过这个条件,我们才能把“张三”正确地关联到“销售部”,而不是“技术部”。

  • 创建视图 , 创建"表"

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

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

使用视图和使用普通表一模一样,都是用SELECT

-- 查询我们刚刚创建的视图 SELECT * FROM myview; -- 也可以在视图中使用排序 SELECT * FROM myview ORDER BY dname;
  • 删除视图
drop view 视图名;

删除视图不会影响底层的EMP表和DEPT表的数据,它只是删除了这个“虚拟的规则”。

三、视图的规则和限制

规则/限制详细解释
1. 唯一命名视图在数据库中的名字必须是唯一的,不能和已有的表名或者其他视图名重复。
2. 性能影响创建视图本身没有限制,但如果你的视图是基于一个非常复杂的多表查询(比如连接10张表),那么查询这个视图也会很慢。因为每次查询视图,都要执行这个复杂的查询。
3. 索引限制视图不能添加索引,也不能有关联的触发器或默认值。想优化性能,必须去优化创建视图的那个SELECT语句。
4. 安全性视图可以隐藏敏感数据。比如,你可以创建一个视图,只显示员工的基本信息,而不显示工资列,然后把视图的权限给HR专员,而不是给整个表的权限。
5. ORDER BY 覆盖如果在定义视图时使用了ORDER BY,在查询视图时又使用了ORDER BY,那么查询时的ORDER BY会覆盖掉视图定义中的建议: 不要在定义视图时使用ORDER BY,而应该在查询视图时按需排序。
6. 混合使用视图可以和表一起使用。你可以写一条SQL,JOIN一张表和另一个视图。
http://www.jsqmd.com/news/517124/

相关文章:

  • 从官网下载到命令行验证:手把手教你为Windows10配置MySQL 8.0开发环境
  • 从SDF配置到ROS订阅:在Gazebo中构建双目视觉仿真闭环
  • 5分钟搞定OpenClaw飞书机器人:QwQ-32B对话触发自动化任务
  • Docker挂载卷修改实战:3种方法解决路径变更难题(附详细步骤)
  • IAR新手必看:解决Fatal Error[Pe1696]找不到core_cm0plus.h的5个步骤
  • 告别卡顿!用VMware 17 Pro在Win10/Win11上流畅运行虚拟机的5个关键设置
  • 军哥fastgpt教程-7-fastgpt源码解析之向量化与检索优化
  • LeagueAkari:英雄联盟玩家的智能效率助手
  • CloudCompare M3C2插件实战:从点云数据到精准变化检测的保姆级教程
  • 如何构建AI代理评估体系的四大核心技术维度——Ai agent 实战
  • 若依框架下JimuReport积木报表的Token安全集成实践
  • 元胞自动机在数学建模中的5个实际应用案例(附MATLAB实现技巧)
  • 矩阵的核与像:从线性变换视角解析矩阵的核心结构
  • SystemVerilog功能覆盖率实战:cover group与coverpoint的5个常见坑点解析
  • 从安装到实战:在Windows上用PHPStudy集成环境一键部署Redis及RDM图形化管理
  • 别再只调阈值了!深入聊聊51单片机土壤检测里,ADC采样和湿度校准那点事儿
  • 嵌入式RTOS工程实践:硬实时判定与确定性调度设计
  • 高效数学公式编辑:从入门到精通的工具与技巧
  • Simulink 中光伏与同步发电机协同的奇妙之旅
  • Pixel Dimension Fissioner实际案例:政务公开文案→市民易懂版的合规性裂变实践
  • 手机远程管理家里的青龙面板?Docker+Cpolar内网穿透实战,5分钟搞定公网访问
  • PyTorch实现指南:手把手教你写可复用的CAB通道注意力模块(含残差连接版本)
  • macOS下OpenClaw排错指南:GLM-4.7-Flash接口连接失败解决方案
  • 出差也能远程开空调:用cpolar给HomeAssistant配置永久免费域名,实现智能家居7x24小时远程访问
  • OpenClaw排错指南:Qwen3-32B接口调用失败的7种解决方案
  • 嵌入式Linux驱动开发:原理、架构与工程实践
  • Python实现sRGB与线性RGB互转:24色卡可视化与gamma校正原理详解(附源码)
  • ZYNQ实战:PS端驱动DMA实现高效数据流转与验证
  • 从‘我的电脑’到‘公司电脑’:手把手教你用Win10加入Windows Server 2012 R2域控的完整流程
  • PDF-Extract-Kit-1.0与知识图谱结合:自动化构建领域知识库