(MySQL)视图

news2024/9/19 9:40:19

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

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.coloradmin.cn/o/2141610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在kotlin中给空字符串(””)和null值设置默认值问题?

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。 😊 座右铭:不…

句子成分——每日一划(九)

人民英雄,永垂不朽! 目录 一、原句 二、主语 三、谓语 四、介词短语 一、原句 Eternal glory to the heroes of the people who from 1840 laid down their lives in the many struggles against domestic and foreign enemies and for national i…

关于安卓App自动化的一些想法

安卓App自动化一般使用PythonAppium。页面元素通常是使用AndroidStudio中的UI Automator Viewer工具来进行页面元素的追踪。但是这里涉及到一个问题就是,安卓apk在每次打包的时候,会进行页面的混淆以及加固,所以导致每次apk打包之后会出现页面…

C++ | Leetcode C++题解之第407题接雨水II

题目&#xff1a; 题解&#xff1a; class Solution { public:int trapRainWater(vector<vector<int>>& heightMap) {int m heightMap.size(), n heightMap[0].size();int maxHeight 0;int dirs[] {-1, 0, 1, 0, -1};for (int i 0; i < m; i) {maxHei…

CefSharp_Vue交互(Element UI)_WinFormWeb应用(2)---置顶和取消置顶(含示例代码)

一、预览 获取winform的置顶参数,和设置置顶参数 1.1 置顶(默认不置顶) 1.2 示例代码

VSCode C++ Tasks.json中的变量

前言 上文介绍了在VSCode中创建C项目和编译多文件的情况。本文将介绍Tasks.json中一些变量的含义&#xff1b; 内容 tasks.json文件 下文参考VSCode文档&#xff1a;Visual Studio Code 变量参考 预定义标量 ${userHome} - 用户主文件夹的路径${workspaceFolder} - 在 VS Co…

[产品管理-22]:NPDP新产品开发 - 20 - 产品设计与开发工具 - 开发、制造、装配阶段

目录 前言&#xff1a; 一、原型法 - 开发阶段首先开发原型 1.1 概述 1、定义 2、目的 3、类型 4、开发过程 5、优点与缺点 优点 缺点 6、应用实例 1.2 开发阶段 1. Alpha 原型阶段 - 实验室验证 2. Beta 原型阶段 - 客户现场验证 3. 试生产原型阶段 4. 虚拟原…

【机器学习】多模态AI——融合多种数据源的智能系统

随着人工智能的快速发展&#xff0c;单一模态&#xff08;如文本、图像或语音&#xff09;已经不能满足复杂任务的需求。多模态AI&#xff08;Multimodal AI&#xff09;通过结合多种数据源&#xff08;如文本、图像、音频等&#xff09;来提升模型的智能和表现&#xff0c;适用…

【Spring框架精讲】进阶指南:企业级Java应用的核心框架(Spring5)

文章目录 【Spring框架精讲】进阶指南&#xff1a;企业级Java应用的核心框架(Spring5)1.Spring框架快速入门1.1七大核心模块1.1.1 Spring Core1.1.2 Spring-Beans1.1.3 Spring Context1.1.4 Spring-Expression1.1.5 Spring AOP1.1.6 JDBC和DAO模块&#xff08;Spring DAO&#…

Python酷库之旅-第三方库Pandas(120)

目录 一、用法精讲 531、pandas.DataFrame.reindex_like方法 531-1、语法 531-2、参数 531-3、功能 531-4、返回值 531-5、说明 531-6、用法 531-6-1、数据准备 531-6-2、代码示例 531-6-3、结果输出 532、pandas.DataFrame.rename方法 532-1、语法 532-2、参数 …

用Python实现时间序列模型实战——Day 23: LSTM 与 RNN 模型的深入学习

一、学习内容 1. 深入理解 LSTM 和 RNN 模型的工作原理 LSTM 和 RNN 模型都擅长处理时间序列数据&#xff0c;但它们在处理长序列时遇到了一些问题&#xff0c;比如 梯度消失 和 梯度爆炸。LSTM 通过 门控机制 改进了传统 RNN 的缺陷&#xff0c;但在处理非常长的序列时仍可能…

Java浅,深拷贝;内,外部类的学习了解

目录 浅拷贝 深拷贝 内部类 匿名内部类 实例内部类 静态内部类 外部类 浅拷贝 简单理解&#xff1a;定义了A&#xff0c;A里面有age和num&#xff0c;拷贝成为B&#xff0c;B里面有age和num package demo1浅克隆和深克隆;//interfaces 是定义了一个接口//implements是使…

火语言RPA流程组件介绍--浏览器页面操作

&#x1f6a9;【组件功能】&#xff1a;浏览器页面前进&#xff0c;后退&#xff0c;刷新及停止等操作 配置预览 配置说明 丨操作类型 后退/前进/刷新 丨超时时间 支持T或# 输入仅支持整型 页面操作超时时间 丨执行后后等待时间(ms) 支持T或# 当前组件执行完成后继续等待…

Spring框架常见漏洞

文章目录 SpEL注入攻击Spring H2 Database Console未授权访问Spring Security OAuth2远程命令执行漏洞(CVE-2016-4977)Spring WebFlow远程代码执行漏洞(CVE-2017-4971)Spring Data Rest远程命令执行漏洞(CVE-2017-8046)Spring Messaging远程命令执行漏洞(CVE-2018-1270)Spring …

Python酷库之旅-第三方库Pandas(119)

目录 一、用法精讲 526、pandas.DataFrame.head方法 526-1、语法 526-2、参数 526-3、功能 526-4、返回值 526-5、说明 526-6、用法 526-6-1、数据准备 526-6-2、代码示例 526-6-3、结果输出 527、pandas.DataFrame.idxmax方法 527-1、语法 527-2、参数 527-3、…

C语言刷题日记(附详解)(5)

一、选填部分 第一题: 下面代码在64位系统下的输出为( ) void print_array(int arr[]) {int n sizeof(arr) / sizeof(arr[0]);for (int i 0; i < n; i)printf("%d", arr[i]); } int main() {int arr[] { 1,2,3,4,5 };print_array(arr);return 0; } A . 1…

vi | vim基本使用

vim三模式&#xff1a;① 输入模式 ②命令模式 ③末行模式&#xff08;编辑模式&#xff09; vim四模式&#xff1a;① 输入模式 ②命令模式 ③末行模式&#xff08;编辑模式&#xff09; ④V模式 一、命令模式进入输入模式方法&#xff1a; 二、命令模式基…

Hybrid接口的基础配置

Hybrid模式是交换机端口的一种配置模式&#xff0c;它允许端口同时携带多个VLAN&#xff08;虚拟局域网&#xff09;的流量。Hybrid端口可以指定哪些VLAN的数据帧被打上标签&#xff08;tagged&#xff09;和哪些VLAN的数据帧在发送时去除标签&#xff08;untagged&#xff09;…

828华为云征文|部署知识库问答系统 MaxKB

828华为云征文&#xff5c;部署知识库问答系统 MaxKB 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 核心竞争力1.3 计费模式 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 MaxKB3.1 MaxKB 介绍3.2 Docker 环境搭建3.3 MaxKB 部署3.4 Max…

Leetcode—322. 零钱兑换【中等】(memset(dp,0x3f, sizeof(dp))

2024每日刷题&#xff08;159&#xff09; Leetcode—322. 零钱兑换 算法思想 dp实现代码 class Solution { public:int coinChange(vector<int>& coins, int amount) {int m coins.size();int n amount;int dp[m 1][n 1];memset(dp, 0x3f, sizeof(dp));dp[0][…