【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 将被覆盖。

视图可以和表一起使用。

相关推荐
新知图书12 分钟前
MySQL用户授权、收回权限与查看权限
数据库·mysql·安全
文城52122 分钟前
Mysql存储过程(学习自用)
数据库·学习·mysql
沉默的煎蛋28 分钟前
MyBatis 注解开发详解
java·数据库·mysql·算法·mybatis
呼啦啦啦啦啦啦啦啦28 分钟前
【Redis】事务
数据库·redis·缓存
HaoHao_01030 分钟前
AWS Serverless Application Repository
服务器·数据库·云计算·aws·云服务器
C语言扫地僧1 小时前
MySQL 事务及MVCC机制详解
数据库·mysql
小镇cxy1 小时前
MySQL事物,MVCC机制
数据库·mysql
书生-w1 小时前
Redis Windows 解压版安装
数据库·windows·redis
猿小飞1 小时前
redis 5.0版本和Redis 7.0.15的区别在哪里
数据库·redis·缓存
雾里看山2 小时前
【MySQL】 库的操作
android·数据库·笔记·mysql