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

MySQL:视图

目录

一、什么是视图

二、视图的创建和使用

三、修改数据

(1)修改真实表

(2)修改视图 

四、删除视图 

五、视图的优点


一、什么是视图

  视图是一个虚拟的表,它是基于一个或多个基本表或其他视图的查询结果集视图本身不存储数据,而是通过执行查询来动态生成数据。用户可以像操作普通表一样使用视图进行查询、更新和管理。视图本身并不占用物理存储空间,它仅仅是一个查询的逻辑表示,物理上它依赖于基础表中的数据。


二、视图的创建和使用

语法:

CREATE VIEW view_name [(column_list)] AS select_statement

  这里的语法就是我们创建视图的方式,但是我们为什么要使用视图呢?,我们下面来举个例子来看看我们使用视图的原因之一。

  我们有四张表:学生表、班级表、课程表、成绩表,此时我们进行学生的所有成绩的查询,我们发现虽然我们可以得到查询结果,但是我们的查询代码其实是十分复杂的,如果我们想要对这个数据进行多次查询,是非常麻烦的。

  因此为了防止多次写这些麻烦的代码,我们就使用了视图这种方式

  但是在这里我们要注意,如果我们要查询的这些表中存在重名的列,我们要将除第一个写的列之外的列都起上别名。

  此时我们就可以利用我们刚刚创建的视图,得到一个新的查询方式。此时这种查询方式,在以后的查询就会十分简单。

  当然,如果我们不想要这种还要注意别的列,我们也可以在创建视图的时候直接指定各个列的名字


三、修改数据

(1)修改真实表

  我们的视图是基于一个或多个基本表或其他视图的查询结果集,那么如果我们在创建完视图后,在对真实表中的数据进行修改,此时我们的视图结果是否会发生改变呢?

  我们将张三的的MySQL的成绩修改为100


 

  此时我们再来查看我们的视图结果,会发现此时的视图也会发生改变

  因此,修改我们的真实表示会影响我们的视图的


(2)修改视图 

  在上面我们是修改真实表,会修改视图,而此时如果我们修改视图,他会影响我们的真实表吗?

  我们将视图中score_id = 3的成绩修改为99

  我们就会发现,修改我们的视图后,我们真实表中的成绩表id=3的成绩会变成99

  因此,修改我们的视图也会影响我们的真实表。


注意:并不是所有的修改真实表就会影响视图和修改视图影响真实表

如果我们的视图存在以下这些情况我们的视图是不可更新的:

  1. 创建视图时使用聚合函数的视图
  2. 创建视图时使用 DISTINCT
  3. 创建视图时使用 GROUP BY 以及 HAVING 子句
  4. 创建视图时使用 UNION 或 UNION ALL
  5. 查询列表中使用子查询
  6. 在FROM子句中引用不可更新视图

四、删除视图 

  我们的删除视图很简单就只需要利用到关键字 drop

语法:

drop view view_name;

  删除视图v_student_socre

  此时我们在利用v_student_socre视图进行结果的查询就会失败 


五、视图的优点

(1)简单性:视图可以将复杂的查询封装成一个简单的查询。例如,针对一个复杂的多表连接查询,可以创建一个视图,用户只需查询视图而无需了解底层的复杂逻辑

  这种优点就是我们在上述介绍的


(2)安全性:通过视图,可以隐藏表中的敏感数据。例如,一个系统的用户表中,可以创建一个不包含密码列视图,普通用户只能访问这个视图,而不能访问原始表。

  而安全性,其实就是用户只能通过视图来查看数据,而我们在创建视图的时候,会将不想让用户看到的列,不放入视图当中,这样就实现数据的隐藏

  例如我们还是创建上述表的视图,但是我们要隐藏每个学生的性别,我们就可以在创建视图的时候不加入这个列。

  创建一个不带学生性别的视图

  此时我们再查询视图结果,就不会得到每个学生的性别了,这就实现视图的安全性 


(3)逻辑数据独立性:视图提供了一种逻辑数据独立性,即使底层表结构发生变化,只需修改视图定义,而无需修改依赖视图的应用程序。使用到应用程序与数据库的解耦


(4)重命名列:视图允许用户重命名列名,以增强数据可读性。


好了,今天的分享就到这里了,还请大家多多关注我们下一篇见!

相关文章:

  • 前端弹性布局:用Flexbox构建现代网页的魔法指南
  • Linux 离线安装 Docker 和 Docker Compose 最新版 的完整指南
  • 微机控制电子式持久蠕变慢应变应力腐蚀试验机
  • MATLAB安装常见问题及解决方案详解(含代码示例)
  • 在 Kubernetes 中使用 Docker 实现 GPU 支持的完整方案
  • Android 13 使能user版本进recovery
  • 智能商品推荐系统技术路线图
  • Python与C语言的区别
  • stm32 lcd绘制波形和频谱
  • 数仓-缓慢变化维是什么,如何解决
  • 双目视觉系统中,极线校正(Epipolar Rectification)与单应性矩阵/多平面单应性模型
  • 【LangChain全景指南】构建下一代AI应用的开发框架
  • linux中常用的命令(三)
  • Docker镜像搬运工:save与load命令的实战指南
  • 软考 系统架构设计师系列知识点之杂项集萃(55)
  • 大模型微调指南之 LLaMA-Factory 篇:一键启动LLaMA系列模型高效微调
  • linux搭建hadoop学习
  • 【Linux】线程POSIX信号量
  • 【Linux基础】程序和软件安装管理命令
  • MindSpore框架学习项目-ResNet药物分类-模型评估
  • 昆明一学校门外小吃摊占满人行道,城管:会在重点时段加强巡查处置
  • 这座古村,藏着多少赣韵风华
  • 领证不用户口本,还需哪些材料?补领证件如何操作?七问七答
  • 李在明正式登记参选下届韩国总统
  • 北京2025年住房发展计划:供应商品住房用地240-300公顷,建设筹集保租房5万套
  • 竞彩湃|霍芬海姆看到保级曙光,AC米兰专注于意大利杯