【MySQL】视图——视图、视图的概念、为什么要使用视图、视图的基本使用、视图规则和限制

文章目录

  • MySQL
    • [1. 视图](#1. 视图)
      • [1.1 视图的概念](#1.1 视图的概念)
      • [1.2 为什么要使用视图](#1.2 为什么要使用视图)
      • [1.3 视图的基本使用](#1.3 视图的基本使用)
      • [1.4 视图规则和限制](#1.4 视图规则和限制)

MySQL

1. 视图

1.1 视图的概念

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。

**  视图的主要作用包括:**

简化数据操作:对于复杂的查询结果,通过创建视图,可以将其以一种更简单、直观的方式呈现,方便用户进行后续的数据操作。

例如,如果有一个包含大量字段的订单表,而用户经常只需要查看订单号、客户名称和订单金额,就可以创建一个只包含这三个字段的视图,使得数据操作更简便。

数据安全性:可以通过视图限制用户对某些敏感数据的访问。只将用户需要的数据展示在视图中,而隐藏其他不相关或敏感的信息。

比如,在员工信息表中,可以创建一个视图只显示员工姓名和部门,而不显示工资等敏感信息。

逻辑数据独立性:当底层的表结构发生变化时,如果视图的定义没有改变,那么对于使用视图的用户来说,他们的操作方式不需要改变。

1.2 为什么要使用视图

1. 数据抽象和简化:

视图能够将复杂的数据结构和关系简化为更易于理解和使用的形式。 例如,一个包含多个关联表的复杂数据库结构,通过创建视图,可以将相关数据整合为一个直观的单一数据源,减少用户处理复杂查询的需求。

2. 数据安全性增强:

可以通过视图控制用户对特定数据的访问权限。 只在视图中展示允许用户查看的数据,而隐藏敏感或不必要的信息。比如,在一个包含员工个人信息的数据库中,可以创建一个视图,只显示员工的姓名、部门和职位,而不包括工资、社保号等敏感数据。

3. 逻辑数据独立性:

当底层的表结构发生更改时,如果视图的定义不受影响,那么用户基于视图的操作无需修改。 这使得数据库的维护和升级对用户的影响最小化。

4. 一致性和标准化:

视图确保用户始终以相同的方式访问和处理特定的数据子集,有助于保持数据的一致性和标准化。

5. 提高查询性能:

对于一些经常使用的复杂查询,将其创建为视图可以避免重复编写相同的查询语句,提高查询效率。而且,数据库系统在某些情况下可以对视图进行优化,提高数据获取的速度。

6. 隐藏复杂性:

**  数据库管理员可以使用视图来隐藏底层数据存储和处理的复杂性,让用户专注于他们需要的数据和操作。**

例如,在一个销售数据库中,创建一个视图来计算每个产品的月销售总额。这样,销售人员无需了解复杂的计算逻辑,只需使用这个视图获取所需的信息。

综上所述,视图在数据库管理和数据使用中发挥着重要的作用,能够提高数据管理的效率、安全性和可用性。

1.3 视图的基本使用

创建视图create view 视图名 as select语句 from 表明 where 限制条件;

删除视图drop view 视图名;

案例:

sql 复制代码
create view v_ename_dname as select ename, dname
from EMP, DEPT where EMP.deptno=DEPT.deptno;
sql 复制代码
select * from v_ename_dname order by dname;
+--------+------------+
| ename  |   dname    |
+--------+------------+
| CLARK  | ACCOUNTING |
| KING   | ACCOUNTING |
| MILLER | ACCOUNTING |
| SMITH  | RESEARCH   |
| JONES  | RESEARCH   |
| SCOTT  | RESEARCH   |
| ADAMS  | RESEARCH   |
| FORD   | RESEARCH   |
| ALLEN  | SALES      |
| WARD   | SALES      |
| MARTIN | SALES      |
| BLAKE  | SALES      |
| TURNER | SALES      |
| JAMES  | SALES      |
+--------+------------+

修改了视图,对基表数据有影响:

sql 复制代码
select emp.ename,dept.dname,dept.deptno from emp,dept where
emp.deptno=dept.deptno order by dname;
update v_ename_dname set ename='TEST' where ename='CLARK';
select * from EMP where ename='CLARK';
select * from EMP where ename='TEST';

修改了基表,对视图有影响:

sql 复制代码
mysql> update EMP set deptno=10 where ename='JAMES'; -- 修改基表
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from v_ename_dname where ename='JAMES';
+-------+----------+
| ename |  dname   |
+-------+----------+
| JAMES | RESEARCH | <== 视图中的数据也发生了变化
+-------+----------+

1.4 视图规则和限制

与表一样,必须唯一命名(不能出现同名视图或表名)。

创建视图数目无限制,但要考虑复杂查询创建为视图之后的性能影响。

视图不能添加索引,也不能有关联的触发器或者默认值。

视图可以提高安全性,必须具有足够的访问权限。

order by 可以用在视图中,但是如果从该视图检索数据 select 中也含有 order by ,那么该视图中的 order by 将被覆盖。

视图可以和表一起使用。

相关推荐
LUCIAZZZ6 分钟前
HikariCP数据库连接池原理解析
java·jvm·数据库·spring·springboot·线程池·连接池
我在北京coding22 分钟前
300道GaussDB(WMS)题目及答案。
数据库·gaussdb
小Tomkk35 分钟前
阿里云 RDS mysql 5.7 怎么 添加白名单 并链接数据库
数据库·mysql·阿里云
明月醉窗台1 小时前
qt使用笔记二:main.cpp详解
数据库·笔记·qt
沉到海底去吧Go2 小时前
【图片自动识别改名】识别图片中的文字并批量改名的工具,根据文字对图片批量改名,基于QT和腾讯OCR识别的实现方案
数据库·qt·ocr·图片识别自动改名·图片区域识别改名·pdf识别改名
老纪的技术唠嗑局2 小时前
重剑无锋,大巧不工 —— OceanBase 中的 Nest Loop Join 使用技巧分享
数据库·sql
未来之窗软件服务3 小时前
JAVASCRIPT 前端数据库-V6--仙盟数据库架构-—-—仙盟创梦IDE
数据库·数据库架构·仙盟创梦ide·东方仙盟·东方仙盟数据库
寒山李白3 小时前
MySQL复杂SQL(多表联查/子查询)详细讲解
sql·mysql·子查询·多表联查
冰橙子id3 小时前
centos7编译安装LNMP架构
mysql·nginx·架构·centos·php
玛奇玛丶3 小时前
面试官:千万级订单表新增字段怎么弄?
后端·mysql