MySQL--视图(详解)

embedded/2024/10/22 16:41:27/

目录

  • 一、前言
  • 二、视图
    • 2.1概念
    • 2.2语法
    • 2.3创建视图
      • 2.3.1目的
    • 2.4查看视图
    • 2.5修改数据
      • 2.5.1通过真实表修改数据,会影响视图
      • 2.5.2通过修改视图,会影响基表
    • 2.6注意
    • 2.7 删除视图
    • 2.8 视图的优点

一、前言

                              欢迎大家来到权权的博客~欢迎大家对我的博客进行指导,有什么不对的地方,我会及时改进哦~ 

博客主页链接点这里–>:权权的博客主页链接

二、视图

2.1概念

视图是⼀个虚拟的表,它是基于⼀个或多个基本表或其他视图的查询结果集。视图本⾝不存储数据,而是通过执⾏查询来动态生成数据。用户可以像操作普通表⼀样使⽤视图进行查询、更新和管理。视图本⾝并不占用物理存储空间,它仅仅是⼀个查询的逻辑表示,物理上它依赖于基础表中的数据。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。因此,视图中的数据是依赖于原来的表中的数据的。一旦表中的数据发生改变,显示在视图中的数据也会发生改变。同样对视图的更新,会影响到原来表的数据。

2.2语法

sql">CREATE VIEW view_name [(column_list)] AS select_statement;

2.3创建视图

2.3.1目的

创建视图的目的,有时候我们不想让别人知道一些信息,只想让别人知道想让别人的信息的时候,我们就可以创建视图。

在这里插入图片描述

创建一个名字为v_进货表_供货表的视图,只让读者查询这个v_进货表_供货表时,只看到进货日期、进价、供货商名称、联系人.

sql">SELECT jhb.`进货日期`,jhb.`进价`,ghs.`供货商名称`,ghs.`联系人`,COUNT(ghs.`供货商名称`)
FROM 进货表 jhb,供货商表 ghs 
WHERE jhb.`供货商ID`=ghs.`供货商ID`
GROUP BY jhb.`进货日期`,jhb.`进价`,ghs.`供货商名称`,ghs.`联系人`;

在这里插入图片描述

把这个查询用一个视图封装起来(没有指定列名)

sql">CREATE VIEW v_进货表_供货商表 AS
(
SELECT jhb.`进货日期`,jhb.`进价`,ghs.`供货商名称`,ghs.`联系人`,COUNT(ghs.`供货商名称`)
FROM 进货表 jhb,供货商表 ghs 
WHERE jhb.`供货商ID`=ghs.`供货商ID`
GROUP BY jhb.`进货日期`,jhb.`进价`,ghs.`供货商名称`,ghs.`联系人`
);

把这个查询用一个视图封装起来(指定列名)

sql">CREATE VIEW v_进货表_供货商表1
(
`进货日期`,`进价`,供货商名称,`联系人`
)AS
(
SELECT jhb.`进货日期`,jhb.`进价`,ghs.`供货商名称`,ghs.`联系人`
FROM 进货表 jhb,供货商表 ghs 
WHERE jhb.`供货商ID`=ghs.`供货商ID`
);

在这里插入图片描述

2.4查看视图

语法:

sql">select * from 视图名;

查看视图

sql">select * from v_进货表_供货商表;

在这里插入图片描述

2.5修改数据

使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。因此,视图中的数据是依赖于原来的表中的数据的。一旦表中的数据发生改变,显示在视图中的数据也会发生改变。同样对视图的更新,会影响到原来表的数据。

2.5.1通过真实表修改数据,会影响视图

在这里插入图片描述

2.5.2通过修改视图,会影响基表

在这里插入图片描述
在这里插入图片描述

2.6注意

修改真实表会影响视图,修改视图同样也会影响真实表
• 以下视图不可更新:
◦ 创建视图时使用聚合函数的视图
◦ 创建视图时使用 DISTINCT
◦ 创建视图时使用 GROUP BY 以及 HAVING 子句
◦ 创建视图时使⽤ UNION 或 UNION ALL
◦ 查询列表中使用子查询
◦ 在FROM子句中引用不可更新视图>

2.7 删除视图

语法:

sql">drop view view_name;

删除 v_进货表_供货商表 的视图

在这里插入图片描述
在这里插入图片描述

2.8 视图的优点

  1. 简单性:视图可以将复杂的查询封装成⼀个简单的查询。例如,针对⼀个复杂的多表连接查询,可
    以创建⼀个视图,⽤⼾只需查询视图⽽⽆需了解底层的复杂逻辑。
  2. 安全性:通过视图,可以隐藏表中的敏感数据。例如,⼀个系统的用户表中,可以创建⼀个不包含密码列视图,普通用户只能访问这个视图,而不能访问原始表。
  3. 逻辑数据独立性:视图提供了⼀种逻辑数据独⽴性,即使底层表结构发⽣变化,只需修改视图定
    义,而无需修改依赖视图的应⽤程序。使用到应用程序与数据库的解耦
  4. 重命名列:视图允许用户重命名列名,以增强数据可读性。

在这里插入图片描述
欧耶!!我学会啦!!!!


http://www.ppmy.cn/embedded/127623.html

相关文章

Oracle中处理空值函数(NVL、NVL2、NULLIF等)详解

文章目录 前言一、函数语法NVL函数NVL2函数NULLIF函数COALESCE函数DECODE函数 二、用法区别三、测试用例总结 前言 本文将介绍Oracle中处理空值的函数。常用的处理函数有:NVL()、NVL2()、NULLIF()、COALESCE()。此外DECODE()和CASE()函数也可以起到处理空值的效果。…

Windows Server环境部署Oracle 19c

Windows Server环境部署Oracle 19c 1.安装包下载2.安装运行库3. 数据库安装前期规划4. 数据库安装4.1 解压4.2 开始安装4.3 配置选项4.4 系统类4.5 Oracle主目录用户4.6 典型安装4.7 先决条件检测4.8 概要4.9 安装产品4.10 完成 5. 连接数据库 1.安装包下载 Oracle19c安装包下…

uniapp学习(004-1 组件 Part.1)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战,开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第26p-第p30的内容 文章目录 uniapp和vue差异对比写几个组件并且引用props传值添加类型约束约束类型并且添加默…

OpenCV视频I/O(17)视频写入类VideoWriter之检查视频编写器是否已经成功初始化的函数isOpened()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 如果视频编写器已经成功初始化,则返回 true。 isOpened()函数用于检查 VideoWriter 对象是否已经成功初始化并且准备好写入视频帧。…

pdf阅读器哪个好用?5个软件帮助你快速阅读pdf文件

pdf阅读器哪个好用?5个软件帮助你快速阅读pdf文件 如果你在寻找好用的 PDF 阅读器,有很多强大的软件可以帮助你轻松、高效地阅读和处理 PDF 文件。这些软件不仅可以简单地查看文件,还能提供标注、评论、注释和文档管理等额外功能。以下是5款…

【计算机网络】IPv4地址的表示方法

文章目录 概念表示方法网络部分和主机部分子网掩码特殊地址 概念 IPv4(Internet Protocol version 4)地址是用于标识网络设备的32位数字地址。 表示方法 IPv4地址通常以点分十进制的形式表示,由四个十进制数构成,每个数的取值范…

LangChain使用Prompt02

1.设置提示 from langchain.prompts import ChatPromptTemplate prompt_template ChatPromptTemplate.from_messages([("system", "你是一位专业的翻译,能够将{input_language}翻译成{output_language},并且输出文本会根据用户要求的任…

JavaScript将array数据下载到Excel中

具体代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widt…