【MySQL 保姆级教学】详细讲解视图--(15)

视图

  • 1. 为什么要有视图?
  • 2.视图的定义和特点
  • 3. 创建视图
  • 4. 视图的使用举例
    • 4.1 创建表并插入数据
    • 4.2 举例
  • 5. 视图和基表之间有什么联系呢?

1. 为什么要有视图?

当我们频繁地使用用多表查询和复合查询出的结果时,就需要频繁的使用多表查询和复合查询。

能不能把多表查询和复合查询的结果呢储存起来呢?并且修改查询的内容时,对应表的内容也被修改呢?

为了解决这一问题,我们就应该学习视图了

2.视图的定义和特点

MySQL的视图(View)是一种虚拟表,其内容由查询定义。从本质上讲,视图并不是以存储数据的形式存在的实体表,而是根据定义视图时所使用的查询语句动态生成的一组数据。这意味着,当你查询视图时,MySQL实际上执行的是该视图背后定义的SQL查询语句,返回的数据是基于这些查询语句从一个或多个实际表中提取出来的。(第6结还会细讲)

视图的主要特点和优势包括:

  • 简化查询视图可以将复杂的查询语句封装起来,使用户能够以更简单的方式查询数据,特别是当涉及到多个表的联接操作时。
  • 数据抽象:通过视图,可以隐藏表的真实结构,对外提供一个简化的数据接口,有助于保护数据库的实际设计。
  • 增强安全性:可以创建视图来限制用户对表中某些敏感数据的访问,例如,只允许用户查看某些特定的列或行。
  • 逻辑独立性:当底层表的结构发生变化时,通过调整视图的定义,可以保持应用程序不受影响,从而提高了系统的灵活性。

3. 创建视图

创建视图的语法如下:

CREATE VIEW view_name [(column_list)]
AS select_statement

更新视图的语法:

UPDATE view_name 
SET ... [where...]
  • column_list:可选参数,用于显式指定视图列的名称。
  • select_statement:定义视图的SELECT查询语句。

4. 视图的使用举例

4.1 创建表并插入数据

创建表:

CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT NOT NULL,major VARCHAR(100)
);

插入数据:

INSERT INTO students (name, age, major) VALUES
('Alice', 20, 'Computer Science'),
('Bob', 21, 'Mathematics'),
('Charlie', 22, 'Physics');

在这里插入图片描述

4.2 举例

  1. 创建视图,只需要studentsname列和major
    命令:

    create view myview as select name,major from students;
    

    在这里插入图片描述

  2. 查询视图

    select * from myview;
    

    在这里插入图片描述

  3. 修改视图中的数据后查询基表students的数据

    update myview set name='alice' where name ='Alice';select * from students;
    

    在这里插入图片描述
    当修改视图中的数据时,基表的数据会改变。

  4. 修改基表students中的数据后查询的视图的数据

    update students set name='bob' where name ='Bob';select * from myview;
    

    在这里插入图片描述
    当修改基表的数据时,视图的数据会改变。

5. 视图和基表之间有什么联系呢?

从本质上讲,视图并不是以存储数据的形式存在的实体表,而是根据定义视图时所使用的查询语句动态生成的一组数据。这意味着,当你查询视图时,MySQL实际上执行的是该视图背后定义的SQL查询语句,返回的数据是基于这些查询语句从一个或多个实际表中提取出来的。

查询一下上面创建的视图myview在Linux中的的文件

# 进入MySQL中的test数据库目录
cd /var/lib/mysql/test# 显示数据库中的文件
ls 

在这里插入图片描述
视图文件中存储的是什么呢?
打开myview文件,看一看什么:vim myview.frm
在这里插入图片描述
这张图片显示了一个 MySQL 视图的详细信息,其中红色框内的内容是视图的定义查询语句

这段 SQL 代码表示一个名为 students 的表,从中选择了 namemajor 这两个字段,并分别给它们起了别名 namemajor。这个查询语句是创建视图时使用的原始 SQL 语句。

使用视图查询本质上是执行定义视图时的语句

如:

# 创建一个视图
create view myview as select name, major from studnets;# 查询视图的内容
select * from myview;  
# 实际上是执行
select * from
select `test`.`students`.`name` AS `name`,`test`.`students`.`major` AS `major` from `test`.`students`
# 其实就是执行
select name, major from students; 

在这里插入图片描述
如果对视图进行怎删改查,其实就是对基表进行增删改查(MySQL内部自己操作),视图只是一个查询的结果

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

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

相关文章

聊聊Flink:Flink的分区机制

一、前言 flink任务在执行过程中,一个流(stream)包含一个或多个分区(Stream partition)。TaskManager中的一个slot的subtask就是一个stream partition(流分区),一个Job的流&#xf…

探索SAP财务管理软件:重塑企业财务管理新境界

在当今瞬息万变的商业环境中,企业对于财务管理的精准性、高效性和透明度要求日益增高。作为全球领先的企业管理软件解决方案提供商,SAP凭借其强大的财务管理软件,正引领着全球企业迈向财务管理的新纪元。 SAP 财务管理系统通过智能化技术&am…

数字孪生乡村:数字乡村智慧化营建思路

数字化技术已然成为全球理论和产业界关注的热点命题 ,并广泛应用于城市规划、交通管理、工业、医疗、教育等领域,已经成为文化遗产保护领域最主要方式 ,如数字非遗、数字文物、数字文旅等。 传统村落的数字化保护呈现由单一技术向多技术集成…

《FreeRTOS任务基础知识以及任务创建相关函数》

目录 1.FreeRTOS多任务系统与传统单片机单任务系统的区别 2.FreeRTOS中的任务(Task)介绍 2.1 任务特性 2.2 FreeRTOS中的任务状态 2.3 FreeRTOS中的任务优先级 2.4 在任务函数中退出 2.5 任务控制块和任务堆栈 2.5.1 任务控制块 2.5.2 任务堆栈…

SpringCloud基础 入门级 学习SpringCloud 超详细(简单通俗易懂)

Spring Cloud 基础入门级学习 超详细(简单通俗易懂) 一、SpringCloud核心组件第一代:SpringCloud Netflix组件第二代:SpringCloud Alibaba组件SpringCloud原生组件 二、SpringCloud体系架构图三、理解分布式与集群分布式集群 四、…

Photoshop(PS)——人像磨皮

1.新建一个文件,背景为白色,将图片素材放入文件中 2.利用CtrlJ 复制两个图层出来,选择第一个拷贝图层,选择滤镜---杂色---蒙尘与划痕 3.调整一下数值,大概能够模糊痘印痘坑,点击确定。 4.然后选择拷贝2图层…

core 文件

sysctl -a | grep core_pattern 查看core 的路径 linux下寻找段错误的方法 - 空水 - 博客园 /var/log/messages dmesg -T 一、dmesg命令 dmesg命令,用于获取程序出错时的堆栈地址,用grep过滤出发生崩溃的程序,以及对应的堆栈信息 [Thu Nov …

centos rich 美观打印日志

文章目录 步骤 1: 安装 Python 和 pip步骤 2: 安装 rich-cli步骤 3: 验证安装步骤 4: 使用 rich-cli参考 在 CentOS 上安装 rich-cli 工具,你可以按照以下步骤进行操作。rich-cli 是一个命令行工具,用于将 rich 库的功能(例如美化输出&#x…

《动手学深度学习》中d2l库的安装以及问题解决

当我们在按照《动手学深度学习》这本书或者网课学习时会有需要导入d2l库的使用。​d2I是一个与《动手学深度学习》(Dive into Deep Learning)一书配套的开源教学库,它包含了作者李沐设计的深度学习相关代码和示例。这个库旨在帮助读者通过实践经验来理解…

【大模型实战篇】vLLM的由来以及大模型部署、推理加速实践

1. 问题背景分析及vLLM的由来 大模型毫无疑问,在工作、生活中已经逐渐扮演越来越重要的角色。但大模型的尺寸一般都比较大,处理一个大模型请求的成本可能比传统关键字查询高出 10 倍。推理的成本代价较高,因此提高大模型服务系统的吞吐量&…

常用在汽车PKE无钥匙进入系统的高度集成SOC芯片:CSM2433

CSM2433是一款集成2.4GHz频段发射器、125KHz接收器和8位RISC(精简指令集)MCU的SOC芯片,用在汽车PKE无钥匙进入系统里。 什么是汽车PKE无钥匙进入系统? 无钥匙进入系统具有无钥匙进入并且启动的功能,英文名称是PKE&…

路由器基本原理与配置

一 , 路由是什么? 从源主机到目标主机的转发过程; 二 , 路由器 (1)路由器的工作原理 路由器是一种三层设备,是使用IP地址寻址,实现从源IP到达目标IP地址的端到端的服务&#xff0c…

NPOI 实现Excel模板导出

记录一下使用NPOI实现定制的Excel导出模板&#xff0c;已下实现需求及主要逻辑 所需Json数据 对应参数 List<PurQuoteExportDataCrInput> listData [{"ItemName": "电缆VV3*162*10","Spec": "电缆VV3*162*10","Uom":…

element plus的表格内容自动滚动

<el-table:data"tableData"ref"tableRef"borderstyle"width: 100%"height"150"><el-table-column prop"date" label"名称" width"250" /><el-table-column prop"name" label&…

【Linux网络编程】简单的UDP网络程序

目录 一&#xff0c;socket编程的相关说明 1-1&#xff0c;sockaddr结构体 1-2&#xff0c;Socket API 二&#xff0c;基于Udp协议的简单通信 一&#xff0c;socket编程的相关说明 Socket编程是一种网络通信编程技术&#xff0c;它允许两个或多个程序在网络上相互通信&…

AI 写作(九)实战项目二:智能新闻报道(9/10)

一、项目概述 在当今信息爆炸的时代&#xff0c;新闻传播行业正面临着前所未有的挑战与机遇。随着科技的飞速发展&#xff0c;人们获取信息的渠道日益多样化&#xff0c;对新闻的时效性、准确性和个性化需求也不断提高。在这样的背景下&#xff0c;AI 写作在智能新闻报道中的重…

针对gitgitee的使用

1.下载git 链接 打开终端&#xff0c;桌面鼠标右键 2.配置密钥 登录gitee。 设置密钥 查看官方文档 跟着教程 复制最后的输出进行密钥添加 验证是否添加成功 3.创建&连接远程仓库 创建仓库 git终端进行配置 远程仓库克隆到本地 桌面终端clone,克隆他人|自己的仓库到本地…

DNS批量解析管理软件有什么用

在复杂的网络环境中&#xff0c;DNS批量解析管理软件犹如一把功能强大的钥匙&#xff0c;开启了高效网络管理的大门&#xff0c;为网络运营和维护带来了诸多便利。 1、对于网络服务提供商而言&#xff0c;DNS批量解析管理软件极大地提高了工作效率 传统的DNS解析管理方式在处…

二叉树遍历的非递归实现和复杂度分析

一&#xff0c;用栈实现二叉树先序遍历 1&#xff0c;原理 我用自己的口水话解释一下&#xff1a;准备一个栈&#xff0c;从根节点开始&#xff0c;先判断栈是否为空&#xff0c;如果否&#xff0c;就弹出一个元素&#xff0c;对弹出元素进行自定义处理&#xff0c;再将它的左…

ElasticSearch-全文检索(一)基本介绍

简介 Elasticsearch&#xff1a;官方分布式搜索和分析引擎 | Elastic 全文搜索属于最常见的需求&#xff0c;开源的Elasticsearch是目前全文搜索引擎的首选。 它可以快速地储存、搜索和分析海量数据。维基百科、StackOverflow、Github都采用它 Elastic的底层是开源库Lucene。但…