(MySQL)视图

注:此博文是本人学习过程中的笔记

1.概念

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

2.创建视图

-- 语法
CREATE VIEW view_name [(column_list)] AS select_statement;

3.使用视图 

查询用户的所有信息和考试成绩

-- 使用真实表进行查询
select
s.id, s.name, s.sno, s.age, s.gender, s.enroll_date, 
c.id, c.`name`, 
sc.id, sc.score
from student s, class c, score sc
where s.class_id = c.id
and sc.student.id = s.id
and sc.course_id = co.id
order by s.id;-- 创建视图,在select中使用别名
create view v_student_score as
select s.id, s.name, s.sno, s.age, s.gender, s.enroll_date, 
c.id as class_id, c.`name` as class_name, 
co.id as course_id, co.`name` as course_name, sc.id as score_id, sc.score
where s.class_id = c.id
and sc.student_id = s.id
and sc.course_id = co.id
order by s.id;-- 创建视图,指定结果集中的列名
create view v_student_score_v1
(id, name, sno, age, gender, enroll_date,
class_id, class_name, 
course_id, course_name, score_id, score) as
select s.id, s.name, s.sno, s.age, s.gender, s.enroll_date,
c.id, c.`name`, 
co.id, co.`name`, 
sc.id, sc.score
from student s, class c, course, co, score sc
where s.class_id = c.id
and sc.student_id = s.id
and sc.course_id = co.id;-- 查询视图
select * from v_student_score;
select * from v_student_score_v1;

查询用户的姓名和总分(隐藏学号和各科成绩)

-- 使用真实表进行查询
select s.name, sum(sc.score) total 
from student s, score sc
where s.id = sc.student_id
group by sc.student.id 
order by s.id;
-- 如果使用真实表,在查询列表中随时可以加上学号字段-- 创建视图
create view v_student_total_points as
select s.id, s.name, sum(sc.score) total
from student s, score sc
where s.id = sc.student_id
group by s.id
order by s.id;
-- 使用视图查询,只能查到学生姓名和总分,不能再添加查询字段 

视图和真实表进行表连接查询

select * from v_student_total_points v, student s, where v.id = s.id;

4.修改数据

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

-- 修改唐三藏的JAVA成绩为99分
update score set score = 99 where student_id = 1 and course_id;-- 查询视图,发现唐三藏这条记录已被修改
select * from v_student_score;

通过视图修改数据会影响基表

-- 修改唐三藏的计算机网络成绩为99分
update v_student_score set score = 99 where score_id = 3;-- 查看真实表数据已被修改
select * from score where student_id = 1 and course_id = 5;

4.1.注意事项 

1.修改真实表会影响视图,修改视图同样也会影响真实表

2.以下视图不可更新

创建视图时使用聚合函数

创建视图时使用distinct

创建视图时使用group by以及having子句

创建视图时使用union或union all

查询列表中使用子查询

在from子句中引用不可更新视图 

5.删除视图

-- 语法
drop view view_name;

6.视图的优点 

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

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

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

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

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

mybatisplus映射与数据库表格不一致问题

1.字段映射与属性名不一致 TableField(value"数据库字段名") 2.entity添加了数据库表格不存在的属性 TableField(existfalse) 3.entity对象查询时,有些字段不想要显示在查询结果上 TableField(selectfalse) 4.表名不一致 TableName("数据库表名&…

爬虫--翻页tips

免责声明:本文仅做分享! 伪线程 from DrissionPage import ChromiumPage import timepage ChromiumPage() page.get("https://you.ctrip.com/sight/taian746.html") # 初始化 第0页 index_page 0# 翻页点击函数 sleep def page_turn():page…

使用API有效率地管理Dynadot域名,为域名进行隐私保护设置

前言 Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮箱&…

八股文-多线程、并发

八股文-多线程、并发 最近学到了一种方法,可以用于简历项目经验编写以及面试题目的回答 STAR法则:在什么背景下,你需要解决什么问题,你做了啥,得到了什么结果 情境(Situation): 描…

电子元件制造5G智能工厂物联数字孪生平台,推进制造业数字化转型

5G智能工厂与物联数字孪生平台的融合应用,不仅为电容器制造业注入了新的活力,更为整个制造业的数字化转型树立了新的标杆。电子元件制造过程中,数字孪生平台通过实时监测生产线的各个环节,实现了生产流程的可视化监控。管理人员可…

苹果M4 MacBook Air被曝2025Q1发布 屏幕面板10月出货

9 月 20 日最新消息屏幕供应链咨询公司 DSCC 首席执行官罗斯・杨(Ross Young)昨日(9 月 19 日)在 X 平台面向其订阅用户发布推文,透露苹果 M4 MacBook Air 与低成本 iPad 的屏幕预估将于今年 10 月开始出货。 苹果正在…

海外盲盒APP为盲盒出海助力,拓展海外市场

潮玩市场是一个具有全球化的行业在全球都具有非常高的发展潜力,随着国内盲盒市场的饱和,拓展海外市场对盲盒企业至关重要。近年来,盲盒已经在海外市场取得了一定的成绩,这为企业拓展海外市场奠定了发展基础。 目前,在…

基于FPGA+GPU异构平台的遥感图像切片解决方案

随着遥感和成像技术的不断进步和普及,获取大量高分辨率的遥感图像已成为可能。这些大规模的遥感图像数据需要进行有效的处理和分析,以提取有用的信息,进行进一步的应用。遥感图像切片技术应运而生,该技术可以将大型遥感图像分割成…

[苍穹外卖]-10WebSocket入门与实战

WebSocket WebSocket是基于TCP的一种新的网络协议, 实现了浏览器与服务器的全双工通信, 即一次握手,建立持久连接,双向数据传输 区别 HTTP是短连接, WebSocket是长连接HTTP单向通信, 基于请求响应模型WebSocket支持双向通信 相同 HTTP和WebSocket底层都是TCP连接 应用场景…

Go语言练习——语法实践

目录 一、数组 1.多维数组的声明和使用 2.数组与切片的转换 3.数组在函数中的使用 二、切片 1.切片的动态扩容机制 2.切片的复制与修改 3.切片在排序算法中的应用 三、结构体 1.结构体的嵌套与方法 2.结构体与JSON的序列化 3.结构体的工厂模式 四、映射 1.映射的并发访问 2.映射…

SEGGERS实时系统embOS推出Linux端模拟器

SEGGER 发布了两个新的 embOS 仿真模拟器:embOS Sim Linux 和 embOS-MPU Sim Linux。 通过模拟 Linux 主机系统上的硬件,取代物理硬件,为开发人员提供了一种无缝的方式来构建原型和测试应用程序。 embOS Sim Linux 端口支持 32 位和 64 位系…

对商品分类系统的若干问题的思考

科学研究的目的就是研究事物的特征,并根据共同的特征加以分类 商品分类是商业,制造业中最普遍的活动,几乎所有的企业,电商平台都要对销售的商品,使用的原材料(BOM)进行分类和编号。 商品分类貌似…

从零开始学习Linux(12)---进程间通信(信号量与信号)

目录 1.信号量 2.信号 1.core功能 2.信号集 3.内核态和用户态 用户态(User Mode) 内核态(Kernel Mode) 4.volatile关键字 1.信号量 信号量是计算机科学中用于同步和互斥的一种抽象数据类型。在并发编程中&#xff…

集群聊天服务器项目【C++】项目介绍和环境搭建

前言:学习一个基于C集群聊天服务器的项目,记录学习的内容和学习的过程。 1.项目介绍 在 Linux 环境下基于 muduo 开发的集群聊天服务器。实现新用户注册、用户登录、添加好友、添加群组、好友通信、群组聊天、保持离线消息等功能。 2.技术栈 Json序列…

感谢老美苦苦相逼,逼出华为鸿蒙PC

文|琥珀食酒社 作者 | 随风 哎,告诉大家一个不好的消息 刚刚余总说 Windows PC是最后一批了 因为美国新一轮制裁又来了 但大家别急 再告诉大家一个好消息 那就是我们的鸿蒙PC要来了 今天不是华为三折叠手机和iPhone 16首发吗 估计老美是前端时间…

vue项目加载cdn失败解决方法

注释index.html文件中 找到vue.config.js文件注释、

mybatisplus乐观锁

使用方法: 1.添加version锁标记字段 2.实体类添加对应字段,并加上Version注解 3.添加配置类 Configuration public class MpComfig {Beanpublic MybatisPlusInterceptor mpInterceptor(){MybatisPlusInterceptor mpInterceptor new MybatisPlusIntercep…

人工免疫算法(AIS算法)求解实例---旅行商问题 (TSP)

目录 一、采用AIS求解 TSP二、 旅行商问题2.1 实际例子:求解 6 个城市的 TSP2.2 **求解该问题的代码**2.3 代码运行过程截屏2.4 代码运行结果截屏(后续和其他算法进行对比) 三、 如何修改代码?3.1 减少城市坐标,如下&a…

Windows环境本地部署Oracle 19c及卸载实操手册

前言: 一直在做其他测试,貌似都忘了Windows环境oracle 19c的部署,这是一个很早很早的安装记录了,放上来做个备录给到大家参考。 Oracle 19c‌:进一步增强了自动化功能,并提供了更好的性能和安全性。这个版本在自动化、性能和安全性方面进行了重大改进,以满足现代企业对数…

Serverless 安全新杀器:云安全中心护航容器安全

作者:胡志广(独鳌) 云安全中心对于 Serverless 容器用户的价值 从云计算发展之初,各大云厂商及传统安全厂商就开始围绕云计算的形态来做安全解决方案。传统安全与云计算安全的形态与做法开始发生变化,同时随着这 10 多年的发展,…