第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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PPT背景图片怎么设置?4个详细教程在这!

案例:PPT背景图片怎么设置? 【因为论文答辩,最近需要制作PPT,昨晚之后感觉有点单调,我想设置一个背景图片,让我的PPT看起来更有风格,请问大家是怎么设置PPT背景图片的呢?】 PPT背景…

软件测试技术课程:软件测试流程

软件测试流程如下: 测试计划测试设计测试执行 单元测试集成测试确认测试系统测试验收测试回归测试验证活动 测试计划 测试计划由测试负责人来编写,用于确定各个测试阶段的目标和策略。这个过程将输出测试计划,明确要完成的测试活动&#x…

ipa怎么装到苹果手机

下面介绍ipa怎么装到苹果手机? 方法/步骤 进入手机上的设置,如下图所示: 在设置页面中,点击进入通用,如下图所示: 进入通用页面后,点击页面上的描述文件,如下图所示: …

【大数据】Hadoop总结

本文对于Hadoop中的HDFS和MapReduce的相关面试重点进行了总结,下篇将介绍调优、数据倾斜等进阶知识。 Hadoop总结 一、概述1. Hadoop特性2. HDFS结构HDFS 架构 二、HDFS分布式文件系统1 概述2. HDFS存储数据架构图NameNodeDataNode 3 HDFS优点4 HDFS缺点&#xff08…

MySQL:存储过程与函数、视图

一、学习目标 掌握如何创建存储过程掌握如何创建存储函数熟悉变量的使用方法熟悉如何定义条件和处理程序了解光标的使用方法掌握流程控制的使用掌握如何调用存储过程和函数熟悉如何查看存储过程和函数掌握修改存储过程和函数的方法熟悉如何删除存储过程和函数掌握创建存储过程…

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

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

SpringBoot拦截器获取Request的body数据

1. 场景 自定义Token后,需要在拦截器中进行token验证。在验证的过程中需要读取HttpServletRequest的body部分数据进行验证。 2. 存在问题 如果直接配置拦截器进行urlPatterns拦截,并进行参数验证,在拦截器中获取request的输入流&#xff0c…

网易云商·七鱼智能客服自适应 ProtoStuff 数据库缓存实践

需求背景 目前,网易云商七鱼智能客服数据库缓存使用了 spring-data-redis 框架,并由自研的缓存组件进行管理。该组件使用 Jackson 框架对缓存数据进行序列化和反序列化,并将其以明文 JSON 的形式存储在 Redis 中。 这种方式存在两个问题&…

Servlet技术及代码实现

Servlet概念 Servlet是JavaEE规范之一,规范指的就是接口。Servlet是JavaWeb三大组件之一,三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。Servlet是运行在服务器上的一个java小程序,它可以接收客户端发送过来的请求&#xff0c…

Redis高可用--持久化

在Web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准实在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提提供正常服务&a…

绝地求生 压枪python版

仅做学习交流,非盈利,侵联删(狗头保命) 一、概述 1.1 效果 总的来说,这种方式是通过图像识别来完成的,不侵入游戏,不读取内存,安全不被检测。 1.2 前置知识 游戏中有各种不同的枪械&#x…

今天面了个京东拿28K 出来的,让我见识到了测试界的天花板

今年的春招基本已经结束了,很多小伙伴收获不错,拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的软件测试面试题和八股文,为此咱这里也统一做一次大整理和大归类,这也算是划重点了。 俗话说得好&#…

【C生万物】 指针和数组笔试题汇总 (下)

欢迎来到 Claffic 的博客 💞💞💞 👉 专栏:《C生万物 | 先来学C》👈 前言: 承接上文,继续进行指针和数组的练习。 目录 Part2:指针笔试题 1.做题 …

无人值守的IDC机房动环综合运维方案

企业数字化转型以及5G、物联网、云计算、人工智能等新业态带动了数据中心的发展,在国家一体化大数据中心及“东数西算”节点布局的推动下,数据中心机房已成为各大企事业单位维持业务正常运营的重要组成部分,网络设备、系统、业务应用数量与日…

远程桌面连接不上解决方法

远程桌面连接是一种方便快捷的技术,可以让用户在不同的设备之间共享桌面和访问远程计算机。然而,有时候我们可能会遇到远程桌面连接无法正常连接的问题。在本篇文章中,我们将详细介绍远程桌面连接无法连接的常见原因,并提供相对应…

chatgpt赋能Python-python3m

Python 3: 一个新时代的编程语言 在编程的世界里,Python 3可能是当前最为热门的编程语言。Python 3是Python语言的最新版本,代码更加现代化,更加简洁易懂,比Python 2更加易于使用。这篇文章将介绍Python 3的各种特性,…

搭建Serv-U FTP服务器共享文件外网远程访问「无公网IP」

文章目录 1. 前言2. 本地FTP搭建2.1 Serv-U下载和安装2.2 Serv-U共享网页测试2.3 Cpolar下载和安装 3. 本地FTP发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转载自内网穿透工具的文章:使用Serv-U搭建FTP服务器并公网访问【内网穿透】 1. 前言…

云贝餐饮连锁V2-2.7.7 【新增】外卖新订单提醒

独立版:云贝餐饮连锁V2、版本更新至2.7.7,小程序、公众号版本,全插件,包含微信公众号小程序;包更新,独立版; 带商家端,修复收银台、排队点餐、堂食点餐;最新版更新了&…

openwrt修改web网页默认端口

使用SSH登录openwrt后台; openwrt 中默认使用的web服务器是uhttpd, 进入配置文件路径: cd /etc/config/ 使用vim编辑器修改uhttpd文件 vi uhttpd 修改以上标红部分后面的端口 vim编辑器打开uhttpd 文件 修改完成后点键盘ESC退出编辑状态&a…

一个胖乎乎的3D卡片(有点像捏扁的圆柱体)

先上效果图&#xff08;图片是随机的&#xff0c;可能你们看到的和这个不一样。但效果是相同的&#xff09;&#xff1a; 再上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Titl…