26-视图

作者: 紫荆秋雪_文 | 来源:发表于2022-08-31 13:44 被阅读0次

一、常见的数据库对象

  • 表:表是存储数据的逻辑单元,以行和列的形式存在,列就是字段,行就是记录
  • 数据字典:就是系统表,存放数据库相关信息的表。
  • 约束:执行数据校验的规则,用于保证数据完整性的规则
  • 视图:一个或者多个数据表里的数据的逻辑显示,视图并不存储数据
  • 索引:用于提高查询性能,相当于书的目录
  • 存储过程:用于完成一次完整的业务处理,没有返回值,但可通过传出参数将多个值传给调用环境
  • 存储函数:用于完成一次特定的计算,具有一个返回值
  • 触发器:相当于一个事件监听器,当数据库发生特定事件后,触发器被触发,完成相应的处理

二、视图

  • 视图是一种 虚拟表,本身是 不具有数据 的,占用很少的内存空间,它是 SQL 中的一个重要概念
  • 视图建立在已有的表的基础上,视图赖以建立的这些表称为基表
  • 视图的创建和删除只影响视图本身,不影响对应的基表。但是当对视图中的数据进行增加、删除和修改操作时,数据表中的数据会相应的发生变化,反之亦然。
  • 视图是向用户提供基表数据的另一种表现形式。
  • 视图可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户指定不同的查询视图,从而保证了安全性(敏感信息)


    视图-基表.png

三、创建视图

  • 语法格式
CREATE [OR REPLACE] 
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] 
VIEW 视图名称 [(字段列表)] 
AS 查询语句 
[WITH [CASCADED|LOCAL] CHECK OPTION]

1、创建单表视图

CREATE OR REPLACE VIEW view_emp
AS
SELECT id, name
FROM emp;
  • 查询视图
SELECT *
FROM view_emp;
  • SELECT更加丰富(使用AVG函数)
CREATE OR REPLACE VIEW view_emp_avg
AS
SELECT dep_id, AVG(salary)
FROM emp
GROUP BY dep_id;

小结

  • 实际上就是在SQL查询语句的基础上封装了视图 VIEW,这样就会给予 SQL 语句的结果集形成一张虚拟表
  • 在创建视图时,没有在视图名后面指定字段列表,则视图中字段列表默认和 SELECT 语句中的字段列表一致。

2、创建多表联合视图

CREATE VIEW view_emp_dept(emp_id, emp_name, dept_name)
AS
SELECT e.id, e.name, t.name
FROM emp e
         JOIN dept t ON e.dep_id = t.id;

3、基于视图创建视图

CREATE VIEW view_view_emp_dept(id, name, dept_name)
AS
SELECT ve.id, ved.emp_name, ved.dept_name
FROM view_emp ve
         JOIN view_emp_dept ved ON ve.id = ved.emp_id;

四、更新视图的数据

1、新增数据

  • 通过视图来新增数据从而在基表中新增数据
INSERT INTO view_emp
VALUES (1, 'Raven');
  • 查询视图,多了一条数据
SELECT *
FROM view_emp
ORDER BY id;
通过视图来新增数据.png
  • 查看基表
SELECT *
FROM emp
ORDER BY id;
通过视图来新增数据从而在基表中新增数据.png

小结

  • 通过视图新增数据,如同在基表新增数据
  • 通过视图新增数据,不一定可以给基表新增数据(视图中字段一般是少于基表中字段,如果少于的字段为非空时,就无法通过视图来保存数据)

2、更新数据

UPDATE view_emp
SET name = '111'
WHERE id = 1;

3、删除操作

DELETE
FROM view_emp
WHERE id = 1;

小结

虽然可以更新视图数据,但总的来说,视图作为 虚拟表,主要用于 方便查询 不建议更新视图的数据。对视图数据的更改,都是通过对实际数据表里数据的操作来完成的

五、修改、删除视图

1、修改视图

  • 方式一
CREATE OR REPLACE VIEW view_emp_dept(emp_id, emp_name, salary, dept_name)
AS
SELECT e.id, e.name, e.salary, t.name
FROM emp e
         JOIN dept t ON e.dep_id = t.id;
  • 方式二
ALTER VIEW view_emp_dept(emp_id, emp_name, salary, dept_name)
AS
SELECT e.id, e.name, e.salary, t.name
FROM emp e
         JOIN dept t ON e.dep_id = t.id;

2、删除视图

  • 删除视图只是删除视图的定义,并不会删除基表的数据
DROP VIEW IF EXISTS view_view_emp_dept;

六、小结

1、视图的优点

  • 1、操作简单:将经常使用的查询操作定义为视图
  • 2、减少数据冗余:视图与实际数据表不一样,它存储的是查询语句。
  • 3、数据安全:MySQL将用户对数据的 访问限制 在某些数据的结果集上,而这些数据的结果集可以使用视图来实现。用户不必直接查询或操作数据表。
  • 4、适应灵活多变的需求
  • 5、能够分解复杂的查询逻辑:数据库中如果存在复杂的查询逻辑,则可以将问题进行拆解,创建多个视图获取数据,再将创建的多个视图结合起来,完成复杂的查询逻辑

2、视图的不足

  • 如果实际数据表的结构变更了,就需要及时对相关的视图进行相应的维护。特别是嵌套的视图,维护成本较高。

七、练习

#1. 使用表employees创建视图employee_vu,其中包括姓名(LAST_NAME),员工号(EMPLOYEE_ID),部门 号(DEPARTMENT_ID)
CREATE VIEW employee_vu(last_name, emp_id, dept_id)
AS
SELECT last_name, employee_id, department_id
FROM employee;

#2. 显示视图的结构
DESC employee_vu;

# 3. 查询视图中的全部内容
SELECT *
FROM employee_vu;

# 4. 将视图中的数据限定在部门号是80的范围内
CREATE OR REPLACE VIEW employee_vu(last_name, emp_id, dept_id)
AS
SELECT last_name, employee_id, department_id
FROM employee
WHERE department_id = 80;

# 准备
CREATE TABLE IF NOT EXISTS employee
AS
SELECT *
FROM atguigudb.employees;
USE test;

相关文章

  • 26-视图

    一、常见的数据库对象 表:表是存储数据的逻辑单元,以行和列的形式存在,列就是字段,行就是记录 数据字典:就是系统表...

  • السلام عليكم و رحمة الله و بركاته 26- وعن أبي سَعيد سعدِ ...

  • ImageNet Classification with Dee

    读书报告-组号:26-题目:ImageNet Classification with Deep Convoluti...

  • 读书报告-组号:26-题目:ImageNet Classific

    读书报告-组号:26-题目:ImageNet Classification with Deep Convoluti...

  • 敏捷漫画#26-技术债务

    #26-技术债务(Technical debt) 作者评论: 啊,是的。健康的技术债务(Good ol’ tech...

  • POWERQUERY--Date.Day和Date.AddMon

    数据>>>>>>>>>>> 要求>>>>>>>>>>>某公司每月26-次月25日作为会计区间的,所以要对日期处理下...

  • 小行星变好看部打卡9.24-10.4

    4-mengsu ✔️ 10-miki ✔️ 19-麋鹿 ✔️ 23-点点 有几天没打卡 26-布布 ✔️ 2...

  • 2018-08-12

    Day4/21 26-斯然-共享汽车 【今日读书】 《凸法则》 【今日读书时间】8:00--9:00 【阅读总结】...

  • 2018-08-11《凸法则》

    Day3/21 26-斯然-共享汽车 【今日读书】 《凸法则》 【今日读书时间】8:00--9:00 【阅读总结】...

  • 26-求亲

    “我决定和你一起去开封。”月华简短的说。 “丁姑娘上开封不知有何事?” “我已经想清楚了,我要嫁的人便是你,这些年...

网友评论

    本文标题:26-视图

    本文链接:https://www.haomeiwen.com/subject/rncdnrtx.html