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

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)重命名列:视图允许用户重命名列名,以增强数据可读性。


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

http://www.xdnf.cn/news/5283.html

相关文章:

  • 串口屏调试 1.0
  • ComfyUI 如何安装ComfyUI_SLK_joy_caption_two
  • window环境下,如何通过USB接口控制打印机
  • 质心均匀体(引力屏蔽技术)
  • 算法训练营第十三天|226.翻转二叉树、101. 对称二叉树、 104.二叉树的最大深度、111.二叉树的最小深度
  • 多模态大模型中的视觉分词器(Tokenizer)前沿研究介绍
  • 【入门】数字走向II
  • JavaScript 数组去重:11 种方法对比与实战指南
  • 什么是 B2B?2B 产品销售怎么找客户?
  • Unity基础学习(十)Camera组件
  • [ctfshow web入门] web67
  • JVM对象创建内存分配
  • [特殊字符]️ 快速检测与修复TLS 1.0/1.1漏洞指南
  • 人形机器人:主控芯片
  • 红黑树算法笔记(二)性能对比实验
  • 解密数据结构之位图和布隆过滤器
  • TCP IP
  • 社区商城分销团长扩充与扩散策略优化的系统方案
  • Information Fusion期刊期刊投稿经验分享
  • 23、DeepSeekMath论文笔记(GRPO)
  • 计算机网络与多线程同步机制详解
  • Linux系统之----模拟实现shell
  • 轻量级因果语言视觉模型简述:nanoVLM-222M
  • 每日一题:两个仓库的最低配送费用问题
  • DNS负载均衡和CDN的区别
  • Redis 主从同步与对象模型(四)
  • 出现 SEGMENT: ?C_INITSEG 的原因:
  • ERP学习(一): 用友u8安装
  • 结合 ECharts / Ant Design Blazor 构建高性能实时仪表盘
  • smbd:快速拉取服務端SMB共享文件脚本工具