42.MySQL视图

1.一个需求

emp 表的列信息很多,有些信息是个人重要信息 (比如 sal, comm, mgr, hiredate),如果我们希望某个用户只能查询 emp 表的 (empno、ename, job 和 deptno ) 信息,有什么办法?

表的数据:

想让用户查询到的:

MySQL提供的视图(view)功能就可以满足我们的需求。

2.视图的基本概念

  1. 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含列,其数据来自对应的真实表(基表)
  2. 视图和基表关系的示意图

  1. 对视图的总结

①视图是根据基表来创建的,视图是虚拟的表;

②视图也有列,数据来自基表;

③通过视图可以修改基表的数据;

④基表的改变,也会影响到视图的数据。

3.视图的基本使用

3.1创建一个新视图

create view 视图名 as select语句  

3.2修改已存在的视图

alter view 视图名 as select语句 

3.3查看某个视图的创建语句

SHOW CREATE VIEW 视图名

3.4删除一个或多个视图

drop view 视图名1,视图名2

4.视图的使用细节

视图(view)
● 视图细节讨论

  1. 创建视图后,到数据库去看,对应视图只有一个视图结构文件(形式: 视图名.frm) ;
CREATE VIEW emp_view AS SELECT empno,ename,job,deptno FROM emp;

可以看到视图只有emp_view.frm这个结构文件,而不像别的数据库表有其真正的数据文件。

  1. 视图的数据变化会影响到基表,基表的数据变化也会影响到视图[insert update delete ] ;

查询一下基表和视图最原始的样子:

在视图中修改数据,基表也会随之改变:

UPDATE emp_view SET job = 'worker' WHERE empno = 7499;

在基表中插入数据,视图也会更新。

INSERT INTO emp VALUES(8848,'sakura','worker',8888,'2013-6-1',800,200,30);

  1. 视图中可以再使用视图,数据仍然来自基表。
CREATE VIEW emp_view_view AS SELECT ename,job,deptno FROM emp;
SELECT * FROM emp_view_view;

5.视图的使用实例

● 视图练习:针对 emp , dept ,和 salgrade 张三表.创建一个视图,可以显示雇员编号,雇员名,雇员部门名称和薪水级别。

数据库建表准备,并且插入一些示例数据:

CREATE TABLE emp (empno INT PRIMARY KEY,        ename VARCHAR(50) NOT NULL,  job VARCHAR(50),             mgr INT,                       hiredate DATE,                sal DECIMAL(10,2) NOT NULL,   comm DECIMAL(10,2),           deptno INT
);INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
VALUES 
(7369, 'SMITH',  'CLERK',     7902, '1980-12-17', 800.00,  NULL,   20),
(7499, 'ALLEN',  'SALESMAN',  7698, '1981-02-20', 1600.00, 300.00, 30),
(7521, 'WARD',   'SALESMAN',  7698, '1981-02-22', 1250.00, 500.00, 30),
(7566, 'JONES',  'MANAGER',   7839, '1981-04-02', 2975.00, NULL,   20),
(7654, 'MARTIN', 'SALESMAN',  7698, '1981-09-28', 1250.00, 1400.00,30),
(7698, 'BLAKE',  'MANAGER',   7839, '1981-05-01', 2850.00, NULL,   30),
(7782, 'CLARK',  'MANAGER',   7839, '1981-06-09', 2450.00, NULL,   10),
(7788, 'SCOTT',  'ANALYST',   7566, '1987-04-19', 3000.00, NULL,   20),
(7839, 'KING',   'PRESIDENT', NULL, '1981-11-17', 5000.00, NULL,   10),
(7844, 'TURNER', 'SALESMAN',  7698, '1981-09-08', 1500.00, 0.00,   30);
CREATE TABLE dept (deptno INT PRIMARY KEY,       dname VARCHAR(50) NOT NULL,   loc VARCHAR(50)      
);INSERT INTO dept (deptno, dname, loc)
VALUES 
(10, 'ACCOUNTING', 'NEW YORK'),  -- 财务部,对应 emp 中 deptno=10 的雇员(如 KING、CLARK)
(20, 'RESEARCH',   'DALLAS'),    -- 研发部,对应 emp 中 deptno=20 的雇员(如 SMITH、JONES、SCOTT)
(30, 'SALES',      'CHICAGO');   -- 销售部,对应 emp 中 deptno=30 的雇员(如 ALLEN、WARD、MARTIN 等)
CREATE TABLE salgrade (grade INT PRIMARY KEY,        -- 薪资等级(1-5级,等级越高薪资范围越大)losal DECIMAL(10,2) NOT NULL, -- 该等级的最低工资hisal DECIMAL(10,2) NOT NULL  -- 该等级的最高工资
);-- 插入示例数据(覆盖emp表中所有sal值的范围)
INSERT INTO salgrade (grade, losal, hisal)
VALUES 
(1, 500.00, 1000.00),    -- 对应emp中sal=800.00(SMITH)
(2, 1001.00, 1500.00),   -- 对应emp中sal=1250.00(WARD、MARTIN)、1500.00(TURNER)
(3, 1501.00, 2000.00),   -- 对应emp中sal=1600.00(ALLEN)
(4, 2001.00, 3000.00),   -- 对应emp中sal=2450.00(CLARK)、2850.00(BLAKE)、2975.00(JONES)、3000.00(SCOTT)
(5, 3001.00, 6000.00);   -- 对应emp中sal=5000.00(KING)

创建视图,根据需求写select语句:

CREATE VIEW emp_dept_salgrade_view AS SELECT emp.empno AS '雇员编号',      -- 从 emp 表取雇员编号emp.ename AS '雇员名',        -- 从 emp 表取雇员名dept.dname AS '部门名称',     -- 从 dept 表取部门名称salgrade.grade AS '薪水级别'  -- 从 salgrade 表取薪资等级
FROM emp,dept,salgrade
WHERE emp.deptno = dept.deptno AND emp.sal BETWEEN salgrade.losal AND salgrade.hisal;

查看一下该视图:

SELECT * FROM emp_dept_salgrade_view;

6.视图的使用总结

  1. 安全。一些数据表有着重要的信息。有些字段是保密的,不能让用户直接看到。这时就可以创建一个视图,在这张视图中只保留一部分字段。这样,用户就可以查询自己需要的字段,不能查看保密的字段。
  2. 性能。关系数据库的数据常常会分表存储,使用外键建立这些表的之间关系。这时,数据库查询通常会用到连接(JOIN)。这样做不但麻烦,效率相对也比较低。如果建立一个视图,将相关的表和字段组合在一起,就可以避免使用JOIN查询数据。
  3. 灵活。如果系统中有一张旧的表,这张表由于设计的问题,即将被废弃。然而,很多应用都是基于这张表,不易修改。这时就可以建立一张视图,视图中的数据直接映射到新建的表。这样,就可以少做很多改动,也达到了升级数据表的目的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94421.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MinIO01-入门

零、文章目录 MinIO01-入门 1、介绍 (1)介绍 MinIO 是一款基于 Apache License v2.0 的开源对象存储系统,专为海量非结构化数据(如图片、视频、日志文件等)设计,兼容 Amazon S3 API,支持高性…

*Docker数据卷(Volume)核心机制剖析:持久化与共享的终极解决方案

根本问题当容器被删除时,其内部产生的所有文件(包括配置文件、数据库、日志)都会不可逆丢失。数据卷(Volume)通过外置存储方案彻底解决此痛点。一、数据卷与普通容器存储对比实验 场景1:无卷模式下的写入悲…

原型模式在C++中的实现与面向对象设计原则

引言 在软件开发中,原型模式是一种常用的设计模式,主要用于创建对象的克隆。通过原型模式,我们可以避免复杂的对象创建过程,尤其是当对象的初始化需要大量资源或复杂操作时。本文将通过一个具体的例子,详细介绍如何在C…

SpringCloud学习------Gateway详解

在微服务架构中,随着服务数量的激增,如何统一管理服务入口、实现请求路由、保障服务安全等问题日益突出。SpringCloud Gateway 作为 Spring 官方推出的网关组件,凭借其强大的功Gateway 是 Spring 官方基于 Spring、SpringBoot 和 Project Rea…

计算机网络:子网掩码在路由转发中的关键作用

在路由表中,子网掩码是一个不可或缺的组成部分,其核心作用是精确界定IP地址中“网络位”和“主机位”的边界,从而实现路由器对数据包的准确转发。以下从多个角度详细解释其必要性: 1. 区分网络位与主机位,定位目标网络 IP地址由“网络标识”(网络位)和“主机标识”(主…

14.Home-新鲜好物和人气推荐实现

新鲜好物实现1.准备模板<script setup>import HomePanel from ./HomePanel.vue</script><template><homePanel></HomePanel><!-- 下面是插槽主体内容模版<ul class"goods-list"><li v-for"item in newList" :ke…

Linux 系统重置用户密码指南

Linux 系统重置用户密码指南 在 Linux 系统运维中&#xff0c;重置用户密码&#xff08;尤其是 root 密码&#xff09;是一项核心技能。当您忘记密码时&#xff0c;可以通过进入单用户模式或恢复模式来修改密码。此方法适用于大多数 Linux 发行版&#xff0c;如 RHEL/CentOS、D…

[自动化Adapt] GUI交互(窗口/元素) | 系统配置 | 非侵入式定制化

第三章&#xff1a;GUI交互&#xff08;窗口/元素&#xff09; 各位OpenAdapt探索者&#xff0c;欢迎回来~ 在第一章&#xff1a;录制引擎中&#xff0c;我们揭示了OpenAdapt如何通过"眼睛和耳朵"捕捉所有操作细节。接着在第二章&#xff1a;数据模型中&#xff0c…

Java 模版进阶

文章目录模版通配符模版 通配符 实例 import java.util.ArrayList; import java.util.List;class Message<T> {private T message ;public T getMessage() {return message;}public void setMessage(T message) {this.message message;} } public class test {public …

统计鱼儿分布情况 Java

假设有一个池塘&#xff0c;管理员在池塘中添加随机数量的鱼类&#xff0c;为了统计鱼类的分布情况&#xff0c;他将池塘划分为8*8的二维网格&#xff0c;鱼儿随机游动&#xff0c;但是每个网格中最多容纳100条鱼&#xff0c;要求编写程序显示鱼儿分布情况&#xff0c;并计算鱼…

【HUST】计算机|大学计算机基础内容(纯科普向)+数据结构数组、树、队列【旧文搬运】

最初发布时间&#xff1a;2020-09-19 23:17:48 以前写这篇文章&#xff0c;主要是接触到一些非计算机学院的同学&#xff0c;为了交流方便我写下了这篇文章……虽然现在回过头来看写得也比较草率&#xff0c;但确实是我对电脑的基础操作的最早的认识&#xff0c;放到现在我绝对…

CRT调试堆检测:从原理到实战的资源泄漏排查指南

在C/C开发中&#xff0c;内存泄漏和资源管理不当是导致程序崩溃、性能下降的常见原因。微软提供的C运行时库&#xff08;CRT&#xff09;内置了强大的调试工具&#xff0c;能够帮助开发者在开发阶段及时发现并修复资源泄漏问题。本文将深入解析CRT调试堆的工作原理&#xff0c;…

filezilla出现connected refused的时候排查问题

问题描述: 系统是ubuntu20.04&#xff0c;使用filezilla&#xff0c;两个主机之间能够ping通&#xff0c;但是filezilla使用sftp连接的时候显示的是 FATAL ERROR: Connection refused Could connect to the server应该如何排查问题呢 这是一个非常典型的SFTP连接问题。“Connec…

FPGA 基本设计思想--乒乓操作、串并转换、流水线

乒乓操作&#xff08;Ping-Pong&#xff09;的理解&#xff1a;为什么是另一种pipeline&#xff1f;-CSDN博客 FPGA菜鸟学习笔记——2、四大设计思想 - 知乎 乒乓操作&#xff08;Ping-Pong&#xff09;-CSDN博客 乒乓操作原理与FPGA设计-CSDN博客 乒乓操作 — [野火]FPGA …

2023 年 6 月 GESP Python 二级试卷真题+答案+解析

2023 年 6 月 GESP Python 二级试卷解析 一、单选题&#xff08;每题 2 分 &#xff0c;共 30 分&#xff09; 1 、 高级语言编写的程序需要经过以下&#xff08; &#xff09;操作&#xff0c;可以生成在计算机上运行的可执行代码。 A. 编辑 B. 保存 C. 调试…

数据对齐:如何处理时间序列与空间对齐问题?

在多模态学习中&#xff0c;不同模态&#xff08;文本、语音、图像、视频、传感器数据等&#xff09;具有不同的采样率、时间步长、空间分辨率。例如&#xff0c;视频是连续帧&#xff0c;音频是高采样频率的波形&#xff0c;文本是离散符号序列。为了实现有效融合&#xff0c;…

两个任务同一个调用时间 CRON:0 0 3 * * ?,具体如何调度的,及任务如何执行的

xxLjob两个任务 pullGuanjiaSalesJob&#xff0c;不同的执行参数&#xff0c;配置了同一个 XxlJob("pullGuanjiaSalesJob")两个任务同一个调用时间 CRON&#xff1a;0 0 3 * * ?&#xff0c;具体如何调度的&#xff0c;及任务如何执行的在 XXL-JOB 中&#xff0c;当…

【基于WAF的Web安全测试:绕过Cloudflare/Aliyun防护策略】

当Cloudflare或阿里云WAF矗立在Web应用前端&#xff0c;它们如同智能护盾&#xff0c;过滤恶意流量。然而&#xff0c;真正的Web安全测试不止于验证防护存在&#xff0c;更需挑战其边界——理解并模拟攻击者如何绕过这些先进防护&#xff0c;才能暴露深藏的风险。这不是鼓励攻击…

使用YOLOv8-gpu训练自己的数据集并预测

本篇将教学使用示例代码训练自己的数据集&#xff08;train&#xff09;以及预测&#xff08;predict&#xff09;。 目录 一、代码获取 二、训练 1、添加自己的训练集 2、创建训练集设置文件 3、 修改训练代码中数据集设置文件 4、开始训练 三、预测 1、 修改图片路径…

Transformer的并行计算与长序列处理瓶颈

Transformer相比RNN&#xff08;循环神经网络&#xff09;的核心优势之一是天然支持并行计算&#xff0c;这源于其自注意力机制和网络结构的设计.并行计算能力和长序列处理瓶颈是其架构特性的两个关键表现&#xff1a; 并行计算&#xff1a;指 Transformer 在训练 / 推理时通过…