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 一张表和另一个视图。
相关推荐
等....8 小时前
Minio使用
数据库
win x9 小时前
Redis 使用~如何在Java中连接使用redis
java·数据库·redis
迷枫71210 小时前
DM8 数据库安装实战:从零搭建达梦数据库环境(附全套工具链接)
数据库
XDHCOM11 小时前
PostgreSQL 25001: active_sql_transaction 报错原因分析,故障修复步骤详解,远程处理解决方案
数据库·sql·postgresql
卤炖阑尾炎11 小时前
PostgreSQL 日常运维全指南:从基础操作到备份恢复
运维·数据库·postgresql
daad77712 小时前
wifi_note
运维·服务器·数据库
计算机毕设vx_bysj686912 小时前
【免费领源码】77196基于java的手机银行app管理系统的设计与实现 计算机毕业设计项目推荐上万套实战教程JAVA,node.js,C++、python、大屏数据可视化
java·mysql·智能手机·课程设计
吴声子夜歌13 小时前
ES6——正则的扩展详解
前端·mysql·es6
xixingzhe213 小时前
Mysql统计空间增量
数据库·mysql
程序员萌萌13 小时前
Java之mysql实战讲解(三):聚簇索引与非聚簇索引
java·mysql·聚簇索引