MySQL视图

视图

常见的数据库对象

MySQL视图

视图概述

为什么使用视图

可以帮助我们使用表中的 部分数据,对其修改可以改变原来表中的值

可以简化查询

控制数据的访问(权限)

视图的理解

  • 视图是一个本身没有数据且占用内存很少的虚拟表
    [En]

    View is a virtual table that does not have data itself and takes up very little memory*

  • 视图基于已有的表,可以作为视图基础的表称为基表
    [En]

    the view is based on the existing table, and the table on which we can base the view is called * base table * *

  • 视图的创建和删除 会影响视图本身;但是当对视图进行修改时,数据表中的数据也会变化, 反之亦然
  • 可以将视图理解为,存储起来的SELECT语句
  • 不推荐小项目;推荐大项目(可考虑)
    [En]

    small projects are not recommended; large projects are recommended (can be considered)*

创建视图

在 CREATE VIEW 中创建(简化版)

CREATE VIEW 视图名字
AS 查询语句

对于单表

案例1:视图中的数据位于基表中。

[En]

Case 1: the data in the view is in the base table.

CREATE VIEW VU_emp1
AS
SELECT id,name,salary
FROM emp1;

#视图中字段的起名
方式一:别名
CREATE VIEW VU_emp2
AS
SELECT id emp_id,name,salary monthly_sal
FROM emp1;
方式二:直接命名
CREATE VIEW VU_emp2(emp_id,name,monthly_sal)#与查询的字段要一一对应
AS
SELECT id,name,salary
FROM emp1;

情况二:

视图中的数据不在基表中。

[En]

The data in the view is not in the base table.

#创建视图:各个部门的平均工资(基表中没有)
CREATE VIEW VU_emp2
AS
SELECT department_id,AUG(salary) AUG_sal
FROM empolyees
WHERE id department_id ids not null
GROUP BY department_id;

对于多表

#和多表查询是一样的
CREATE VIEW VU_emp3
AS
SELECT t1.id,t1.name,t2.department_name
FROM employees t1 JOIN departments t2
ON t1.name = t2.name;

利用视图对数据进行格式化

CREATE VIEW VU_emp_dept1
AS
SELECT CONCAT(t1.name,'(',t2.department_name,')')
FROM employees t1 JOIN departments t2
ON t1.name = t2.name;

MySQL视图

基于视图创建视图

CREATE VIEW VU_emp_dept1
AS
SELECT 要查询的字段
FROM 视图名字;

查看视图

  • 查看数据库的表对象和查看对象
    [En]

    View the table objects and view objects of the database*

SHOW TABLES;
  • 查看视图的结构
DESC 视图名字;
  • 查看视图的属性信息
SHOW TABLE STATUS LIKE '视图名字';SHOW TABLE STATUS LIKE '视图名字'\G#有的可以执行
  • 查看视图详细定义信息
SHOW CREATE VIEW 视图名字;

更新视图的数据(增删改)

一般情况可以更新

#改视图UPDATE vu_emp1SET salary =6000WHERE id = 2;SELECT *FROM emp1;

MySQL视图

MySQL视图
#改基表
UPDATE emp1
SET salary =15000
WHERE id = 2;
SELECT *
FROM vu_emp1;

MySQL视图

二般更新失败(针对于视图是表中没有的数据)

一般不进行更新

MySQL视图

修改和删除视图

修改视图

方式一:使用 CREATE OR REPLACE VIEW修改视图

CREATE OR REPLACE VIEW vn_emp1
AS
SELECT employe_id,name,salary,email#添加字段 email
FROM employees
WHERE salary > 5000;

方式二:ALTER VIEW修改视图

ALTER VIEW vu_emp1
AS
SELECT employe_id,name,salary,email,hire_data#继续添加字段 hire_data
FROM employees
WHERE salary > 5000;

删除视图

DROP VIEW IF EXISTS (视图名字1,视图名字2...);

:若视图c是基于视图a,b创建的,如果删除a或是b,则会影响视图c的查询。这样的视图c我们需要手动删除,否则会影响使用

总结

视图的优点

  • 操作简单
  • 减少数据冗余
  • 数据安全(控制访问权限)
  • 适应灵活多变的需求
  • 可以分解复杂的查询逻辑

视图的不足

  • 表格结构已改变,需要相应地维护我们构建的视图
    [En]

    the structure of the table has changed, and the view we built needs to be maintained accordingly*

  • 维护成本很高

Original: https://www.cnblogs.com/wht-de-bk/p/16014670.html
Author: T,a,o
Title: MySQL视图

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505556/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Hosts映射

    Hosts映射 思考:如何通过主机名能够找到(ping)某个linux系统? 前言 Hosts:是一个文本文件,用来记录IP和Hostname的映射关系 DNS:是互联网上作为域名…

    数据库 2023年6月11日
    098
  • 1480. 一维数组的动态和

    给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。 请返回 nums 的动态和。 示例 …

    数据库 2023年6月16日
    0111
  • 建议收藏备查!MySQL 常见错误代码说明

    先给大家看几个实例的错误分析与解决方案。 1.ERROR 2002 (HY000): Can’t connect to local MySQL server throu…

    数据库 2023年6月9日
    0134
  • 什么是ETCD及其应用场景

    源自公众号:BiggerBoy 一、什么是etcd? etcd 发音为/ˈɛtsiːdiː/,名字的由来,”distributed etc directory.&#82…

    数据库 2023年6月11日
    0126
  • 重新学习数据库(1)

    单元概述 通过本章的学习能够了解MySQL结构查询语言的概念,掌握SELECT查询语句的基本语法,掌握SELECT查询语句中过滤条件的使用,掌握过滤条件中比较运算符和逻辑运算符的使…

    数据库 2023年6月16日
    0203
  • 多商户商城系统功能拆解31讲-平台端营销-会员充值

    多商户商城系统,也称为B2B2C(BBC)平台电商模式多商家商城系统。可以快速帮助企业搭建类似拼多多/京东/天猫/淘宝的综合商城。 多商户商城系统支持商家入驻加盟,同时满足平台自营…

    数据库 2023年6月14日
    082
  • [LeetCode]21. 合并两个有序链表

    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4输出:1-&…

    数据库 2023年6月9日
    098
  • django中的auth模块与admin后台管理

    1. auth模块 在创建完django项目之后,执行数据库迁移之后,数据库里会增加很多新表,其中有一张名为auth_user的表,当访问django自带的路由admin的时候,需…

    数据库 2023年6月14日
    093
  • Collection

    ArrayList底层使用了数组存储 LinkedList底层使用双向链表 HashSet底层是一个HashMap支持,HashMap底层物理实现一个Hash表 LinkedHas…

    数据库 2023年6月14日
    099
  • element-ui el-table 悬停/选中 行样式,鼠标样式

    /* 用来设置当前页&am…

    数据库 2023年6月16日
    084
  • 2022-8-23 css

    ✏️CSS 一个标签可以有多个css样式浏览器处理冲突的能力,如果一个属性通过两个相同的选择器设置到这个元素上,会根据样式的层叠规则样式的层叠规则——按照样式的声明顺序来层叠的【就…

    数据库 2023年6月14日
    073
  • java死锁(Java-level deadlock)

    java-level deadlock 如下代码可以模拟java死锁。注意:当出现死锁时,应用程序是无响应的。错误信息: Found one Java-level deadlock…

    数据库 2023年6月9日
    088
  • Javaweb07-三层架构(BaseDao)

    1、BaseDao 持久层业务接口实现类的公共父类,定义了jdbc操作数据库的所有公共方法,方便子类继承; import java.io.InputStream; import j…

    数据库 2023年6月16日
    0107
  • 第十八章 AOP底层实现原理

    1.核心问题 1. AOP如何创建动态代理类 2. Spring工厂如何加工创建代理对象 通过原始对象的id值,获得的是代理对象 2.动态代理类的创建 2.1 JDK动态代理 通过…

    数据库 2023年6月14日
    0103
  • 什么是真正的HTAP?(一)背景篇

    To digitally transform the business, AI must be real-time. For AI to be real-time, we need…

    数据库 2023年5月24日
    098
  • 关于EF分页查询报错(Count must have a non-negative value.)的解决方案

    具体的异常信息如下,一开始没有写日志只看到错误信息:Count must have a non-negative value.,从表面意思可以看出来是Count值出现了负数,所以报…

    数据库 2023年6月9日
    091
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球