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

第12章:视图

一、视图

1.常见的数据库对象

①表table:表是存储数据的逻辑单元,行和列形式存在。列是字段,行是记录。

②数据字典:系统表,存放数据库相关信息的表。系统表的数据通常是数据库系统维护。

③约束constraint:执行数据校验规则,用于保证数据完整性

④视图view:一个或多个表里的数据的逻辑显示,视图不存储数据

⑤索引index:用于提高查询性能,相当于书的目录。

⑥存储过程procedure:完成一次完整的业务处理,没有返回值。但可以传出参数将多个值传给调用函数

⑦存储函数:用于完成一次的特定计算,具有一个返回值

⑧触发器:相当于一个事件监听器,当数据库发生特定事件时,触发器被触。完成相应的处理。

2.视图概述

 

2.1为什么使用视图?

视图是使用表的一部分,也可以针对不同的用户制定不同的查询视图。

2.2 视图的理解

①视图是一种虚拟表,不具有数据的,占用很少的空间。

②视图建立在已有表的基础上,视图赖以建立的表是基表。

③视图的数据进行增加、删除和修改,数据表的数据也发生变化。

④把视图理解为存储起来的select语句

⑤视图应用在大型项目,不针对于小型项目

⑥视图优点简化查询,控制数据的访问

3.创建视图

 

3.1创建单表视图

create view 视图名称
as
select 语句

 举例①

create view vu_emp1
AS
select employee_id,last_name,salary
from emps

查看视图

select * from vu_emp1;

举例② 查询语句字段起别名作为视图的字段名

create view vu_emp2
as
select employee_id emp_id,last_name lname,salary
from emps
where salary>8000;

 查看视图

select * from vu_emp2;

举例③起别名 视图和查询的字段名依次匹配

create view vu_emp3(emp_id,lname,monthly_sal)
as
select employee_id,last_name,salary
from emps
where salary>8000;

 查看视图

select * from vu_emp3;

举例④视图中的字段在基表中没有对应的

create view vu_emp_sal
as 
select department_id,avg(salary) avg_sal
from emps
where department_id is not NULL
group by department_id;

 查看视图

select * from vu_emp_sal;

3.2创建多表联合视图

create view vu_emp_dept
as 
select e.employee_id,e.department_id,d.department_name
from emps e
join depts d on e.department_id=d.department_id;
select * from vu_emp_dept;

查看视图

select * from vu_emp_dept;

 3.3利用视图对数据进行格式化:员工姓名(部门名)

create view vu_lname_empname
as
select concat(e.last_name,'(',d.department_name,')'),e.salary
from emps e
join depts d on e.department_id=d.department_id;

查看视图

select * from vu_lname_empname;

 3.4 基于视图创建视图

select * from vu_emp1;

 基于vu_emp1创建视图

create view vu_emp4
as 
select employee_id,last_name
from vu_emp1

查看vu_emp4

select * from vu_emp4

4.查看视图

①查看数据库的表对象、视图对象

show tables;

②查看视图的结构

desc 视图名称

 

③查看视图的属性信息

# 查看视图信息(显示数据表的存储引擎、版本、数据行数和数据大小等)

执行结果显示,注释Comment为VIEW,说明该表为视图,其他的信息为NULL,说明这是一个虚表。

show table status like '视图名称'

④视图的详细定义信息

show create view 视图名称

 

5.更新视图的数据—跟更新表格一样

举例①修改

update vu_emp1

set salary = 20000

where employee_id = 101;

视图和表格同时修改

举例②删除

delete

from vu_emp1

where employee_id=101

5.1不可更新视图的情况

①视图的更新必须要和基表存在一对一的关系

②出现多表查询的视图,聚合函数…

虽然可以更新视图数据,但总的来说,视图作为虚拟表,主要用于方便查询,不建议更新视图的

数据。对视图数据的更改,都是通过对实际数据表里数据的操作来完成的。

6.修改、删除视图

6.1修改视图

ALTER VIEW 视图名称

AS

查询语句

6.2删除视图

DROP VIEW 视图名;

7.总结

7.1视图的优点

①简化查询,操作简单

②减少数据的冗余

在使用的时候,我们要通过定义视图的查询语句来获取结果集。而视图本身不存储数据,不占用数据存储的资源,减少了数据冗余。

③数据安全

MySQL将用户对数据的 访问限制 在某些数据的结果集上,而这些数据的结果集可以使用视图来实现。用户不必直接查询或操作数据表。这也可以理解为视图具有 隔离性 。视图相当于在用户和实际的数据表之间加了一层虚拟表。

 

 

4. 适应灵活多变的需求

5. 能够分解复杂的查询逻辑

7.2视图的缺点

①表的结构发生变化,对应的视图需要及时进行维护。特别是嵌套视图,维护复杂,可读性不好。

②视图过多,维护成本高

8课后练习

练习一

#1. 使用表employees创建视图employee_vu,其中包括姓名(LAST_NAME),员工号(EMPLOYEE_ID),部门号(DEPARTMENT_ID)

create view employee_vu
as
select last_name,employee_id,department_id
from emps

#2. 显示视图的结构

desc  employee_vu

#3. 查询视图中的全部内容

select * from employee_vu

#4. 将视图中的数据限定在部门号是80的范围内

alter view employee_vu
as
select last_name,employee_id,department_id
from emps
where department_id=80

练习二

CREATE TABLE emps

AS

SELECT * FROM atguigudb.employees;

#1. 创建视图emp_v1,要求查询电话号码以‘011’开头的员工姓名和工资、邮箱

create view emp_v1
as
select last_name,salary,email,phone_number
from emps
where phone_number like '011%'

#2. 要求将视图 emp_v1 修改为查询电话号码以‘011’开头的并且邮箱中包含 e 字符的员工姓名和邮箱、电话号码

alter view  emp_v1
as
select last_name,salary,email,phone_number
from emps
where email like '%e%' and phone_number like '011%'

#3. emp_v1 插入一条记录,是否可以?

失败了,在表里有些非空字段没有默认值,在视图里面没有出现此字段

#4. 修改emp_v1中员工的工资,每人涨薪1000

update emp_v1
set salary=salary+1000

#5. 删除emp_v1中姓名为Olsen的员工

delete from emp_v1
where last_name='Olsen'

#6. 创建视图emp_v2,要求查询部门的最高工资高于 12000 的部门id和其最高工资

create view emp_v2
as
select department_id,max(salary)
from emps
group by department_id having max(salary)>12000

#7. emp_v2 中插入一条记录,是否可以?

不可以,聚合函数

#8. 删除刚才的emp_v2 emp_v1

drop view emp_v2,emp_v1

相关文章:

第12章:视图

一、视图 1.常见的数据库对象 ①表table:表是存储数据的逻辑单元,行和列形式存在。列是字段,行是记录。 ②数据字典:系统表,存放数据库相关信息的表。系统表的数据通常是数据库系统维护。 ③约束constraint&#x…...

Word控件Aspose.Words教程:操作 XPS 和 EPS 文档

Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。 Aspose API 支持流行文件格式处理,…...

java并发-Exchanger

## 简介 Exchanger是Java并发包中提供的一个用于线程间数据交换的工具类。它允许在两个并发任务之间进行交换对象,当第一个任务调用exchange()方法时,它会阻塞等待另一个任务也调用这个方法,然后双方交换对象,并返回结果&#xf…...

毫米波雷达系列 | 传统CFAR检测(自适应类)

毫米波雷达系列 | 传统CFAR检测(自适应类) VI-CFAR [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dV34CKJt-1684215839850)(毫米波雷达系列 传统CFAR检测(自适应类).assets/image-20230516131206695…...

【2023/05/19】NFA

Hello!大家好,我是霜淮子,2023倒计时第14天。 非确定有限状态自动机(NFA)是一种模拟复杂系统行为的数学模型 目录 一、基本概念和理论 二、优点和缺点 三、应用场景 四、问题和挑战 五、重要性、作用和使用价值 …...

汽车功能安全

前言 近些年来,功能安全在汽车传统底盘域和动力域的应用已较为成熟,各大汽车企业功能安全意识也逐渐增强。在辅助驾驶和自动驾驶爆发式增长的大趋势下,现代汽车的功能安全在目前尤为复杂的电子电气系统中就显得更为重要,功能安全…...

【Python】数据分析与可视化实践:收支日统计数据可视化的实现

Python数据分析与可视化实践:收支日统计数据可视化的实现 Author:萌狼蓝天 Date:2023-5-7 数据读入与基本处理 上图是原始数据的一部分,存放于excel中,首先使用pd读入数据。读入数据后,删除不是收入&#x…...

Halcon 中_xld算子的概念与应用? select_shape_std 和 select_shape_xld区别?

文章目录 1 halcon中XLD的概念与应用1.1 halcon中什么是XLD?1. 2 XLD相关算子1.2 XLD的应用1.2.1 生成XLD的操作1.2.2 选取特定xld1.2.3 3.3 XLD的合并操作2 select_shape_std 和 select_shape_xld区别2.1 select_shape_std 算子介绍2.2 select_shape_xld算子介绍2.3 select_s…...

[pgrx开发postgresql数据库扩展]7.返回序列的函数编写(3)多行表序列

前文再续,书接上一回。 上一回我们解析了如何通过pgrx编写srf,返回一个TableIterator,但是在具体应用的时候,我们还是针对一条记录返回了一行数据(多个字段的一行,也还是一行),并没…...

刚入职,就想跑路了...

刚入职一家公司,想离职又怕找不到新工作。 说实话,这个问题还是蛮常见的,很多时候,入职的公司并不是自己最满意的,即使是最满意的,入职后总会遇到各种各样的不顺心,公司制度不规范啊&#xff0…...

如何让技术架构师具有预知未来业务发展的能力

大家好,今天我们来分享业务架构,但是我们并不是以产品经理角度讲述一个业务架构是什么以及如何做?而是以一个技术架构师的角度,讲述如何承接业务架构或在没有业务架构的时候,如何判断业务变化趋势而对系统架构提前做出…...

卷麻了,新来的00后实在是太卷了...

在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&…...

单片机--实战练习

目录 【1】GPIO 1.定义 2.应用 I - Input - 输入采集 O - Output - 输出控制 ​编辑​编辑 3.GPIO结构框图 4.功能描述 输入功能 输出功能 5.相关寄存器 【2】点亮一盏LED灯 1.实验步骤 2.编程实现 3.编译下载 4.复位上电 练习:实现LED灯闪烁…...

Go Etcd 分布式锁实战

1 分布式锁概述 谈到分布式锁,必然是因为单机锁无法满足要求,在现阶段微服务多实例部署的情况下,单机语言级别的锁,无法满足并发互斥资源的安全访问。常见的单机锁如Java的jvm锁Lock、synchronized,golang的Mutex等 对…...

Windows环境下pcl点云库 安装配置教程

本文为Windows配置点云库pcl步骤,具体win10、visual studio 2019、pcl1.11.1。 【1】下载安装包 Releases PointCloudLibrary/pcl GitHub 其中,AllInOne是一个包含了PCL库所有模块的单独下载包,方便快速获取整个PCL库,而pdb则…...

岗位分析与可视化系统(三)

五、可视化 5.1薪资页面 在views,编写薪资分析的代码 def salary(request): uname = request.session[username] userInfo = User.objects.get(username=uname) edus, workexps = getSalary.getPageDt() defaultedu = 不限 defaultworkexp = 不限 if request.G…...

unity进阶学习笔记:json和xml

1早期的数据格式 在早期程序开发中一个简单且常用的数据格式为CSV。该格式单纯依靠逗号来分割数据。目前windows的office依然支持CSV解析,我们可以试着新建一个txt文件,在里面加入逗号分隔的信息: a, 1, 15, 30, true 将txt文件后缀改为csv&…...

数据结构之初识树与堆

前言:前面学习了顺序表,队列,栈,链表,我们知道他们都是一种线性表,是一种线性结构,而除此之外,仍有许多我们还没认识的结构,比如树形结构,不同于线性结构&…...

虚拟化技术 — VirtIO 虚拟设备接口标准

目录 文章目录 目录VirtIOVirtIO 虚拟设备接口标准VirtIO 的前后端分层架构标准VirtIO 的数控路径分离架构标准VirtIO 的传输层标准VirtIO 标准在 Linux 中的实现VirtIO VirtIO 由 Rusty Russell 开发,最初是为了支持自己开发的 lguest Hypervisor,其设计目标是在虚拟化环境…...

Dubbo——SpringBoot集成Dubbo(@Autowired和@Reference的区别、Dubbo的服务治理)

Dubbo——原生API实现远程调用_Strine的博客-CSDN博客 在上一篇文章中我们讲了如何使用原生API发起远程调用,显然这种方式肯定是非常麻烦的,因此我们这里就讲如何使用SpringBoot去集成Dubbo将这些配置简化。 生产者服务 添加配置文件 dubbo:applicat…...

Java数组工具类实战:设计不可实例化的静态工具类

实现一个工具类 MathUtils,满足以下要求: 1. 所有方法均为静态,且该类不能从外部实例化(提示:使用私有构造器)。 2. 提供三个静态方法:- maxArray(int[] arr):返回较大值&#xff1b…...

2026上半年数据库系统工程师(软考)上午题回忆与解析(非标答版)

本文为考后回忆整理,非官方标准答案,旨在为考后对答案及下半年备考的同学提供参考。题目顺序和表述可能与原卷有出入,欢迎在评论区指正、补充。📊 整体考情分析 刚结束的2026年上半年数据库系统工程师考试,上午题的风格…...

中兴光猫终极管理指南:解锁工厂模式与Telnet权限的实战教程

中兴光猫终极管理指南:解锁工厂模式与Telnet权限的实战教程 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 掌握中兴光猫的设备管理和权限获取能力是网络管理员和技术爱好者…...

CPU架构启发的智能仓储布局优化实践

1. 仓库布局优化的核心挑战与创新机遇在物流仓储领域,拣货环节通常占据运营成本的55%-65%,而其中约50%的时间消耗在无效行走路径上。传统矩形仓库布局虽然易于规划和施工,但其正交的通道设计导致拣货员需要频繁进行90度转向,这种&…...

LVGL多页面开发避坑:用内部Timer替代轮询,解决页面切换时的内存踩踏问题

LVGL多页面开发中的内存安全实践:用Timer机制替代轮询的工程解决方案 在嵌入式UI开发中,LVGL因其轻量级和跨平台特性成为热门选择。但当项目复杂度提升到多页面交互时,开发者往往会遇到一个棘手问题:如何在频繁切换页面的同时保证…...

【python】ImportError: DLL load failed while importing QtWidgets: 找不到指定的程序。重新安装后搞定

文章目录前言一、PyQt6引用后报错二、使用步骤总结前言 想做个好看的界面,引用了PyQt6,却产生了新问题。 pip install pyqt6-tools,优先做这个动作进行修复。 一、PyQt6引用后报错 python里引用: from PyQt6.QtWidgets import…...

告别枯燥理论!用Unity脚本生命周期与预制体玩转一个“会变身的敌人”

用Unity打造会变身的敌人:脚本生命周期与预制体的实战应用在游戏开发中,敌人AI的行为设计往往是新手开发者最感兴趣也最容易感到困惑的部分。Unity的脚本生命周期和预制体系统为这类需求提供了强大支持,但教科书式的讲解常常让学习者陷入枯燥…...

【云雾效果商业级交付标准】:基于Adobe Sensei图像雾度分析报告(N=1,247张MJ生成图),锁定雾浓度≤0.38的7个关键阈值参数

更多请点击: https://intelliparadigm.com 第一章:云雾效果商业级交付标准的定义与行业意义 云雾效果在现代数字体验中已超越视觉装饰范畴,成为空间感知建模、沉浸式交互与品牌情绪传达的核心媒介。商业级交付标准并非仅关注“是否可见雾气”…...

国内大学生常用的AI写作辅助平台有哪些?

国内高校学生常用的 AI 写作辅助平台,以本土化全流程工具为主,结合通用大模型与专项功能模块,覆盖选题构思、大纲搭建、初稿撰写、语言润色、降重处理、查重检测及格式排版等关键环节,以下是主流平台详解与对比: 一、本…...

操作符从浅入深的讲解

1. 操作符的分类 2. ⼆进制和进制转换 3. 原码、反码、补码 4. 移位操作符 5. 位操作符:&、|、^、~ 6. 单⽬操作符 7. 逗号表达式 8. 下标访问[]、函数调⽤() 9. 结构成员访问操作符 10. 操作符的属性:优先级、结合性 11. 表达式求值1.操作符的分类以…...