SQL VIEW(视图)

本文介绍一下 如何创建、更新和删除视图,以及视图的作用和缺点。

一、什么是视图?

(1)在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。视图包含行和列,就像一个真实的表。

(2)视图是一种不存在的虚拟表: 类似表但是不是表。

  • 类似表: 视图有表结构;
  • 不是表: 没有数据, 视图的数据来源都是基表;

(3)视图中的字段是来自一个或多个数据库中的真实的表中的字段。

  • 单表视图: 基表只有一个;
  • 多表视图: 基表至少两个以上;

(4)我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。

(5)数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响。

(6)视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据。

(7)可以从某个查询内部、某个存储过程内部,或者从另一个视图内部来使用视图。通过向视图添加函数、join 等等,我们可以向用户精确地提交我们希望提交的数据。

SQL CREATE VIEW 实例

SQL CREATE VIEW 语法:

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

--创建视图--
create or replace view v_student as 
select Sno,Sname
from student;

--从视图中检索数据,即查询上面这个视图--
select * from v_student;

--也可以向查询添加条件--
select * 
from v_student
where Sname like '%云‘;

--删除视图--
drop view v_student;

二、视图的作用

(1)简化了操作,把经常使用的数据定义为视图,可以将复杂的SQL查询语句进行封装。

如在实际工作中,不同的人员只关注与其相关的数据,而与他无关的数据,对他没有任何意义。根据这一情况,可以专门为其创建一个视图,定制用户数据,聚焦特定的数据。此后当他查询数据时,只需 select * from view_name; 就可以了。

(2)安全性,用户只能查询和修改能看到的数据。

使用视图,基表中的数据就有了一定的安全性。因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以不通过视图将基表中重要的字段信息给用户。视图是动态的数据的集合,数据是随着基表的更新而更新的。同时,用户对视图,不可以随意的更改和删除,可以保证数据的安全性。

方便了权限管理,让用户对视图有权限而不是对底层表有权限进一步加强了安全性

(3)逻辑上的独立性,屏蔽了真实表的结构带来的影响。

视图的存在: 主要是为了对外提供数据支持(外部系统);隐藏了基表字段(隐私);保证了数据库的数据安全(保护数据库内部的数据结构);可以灵活的控制对外的数据: 保证针对每个接口都有一个单独的数据支持,增强了用户友好性。

三、视图的缺点:

(1)性能差

  • 数据库必须把视图查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么即使是视图的一个简单查询,数据库也要把它变成一个复杂的结合体,需要花费一定的时间。

(2)修改限制

  • 当用户试图修改视图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的视图来说,这是很方便的,但是,对于比较复杂的试图,可能是不可修改的。
  • 在定义数据库对象时,不能不加选择地来定义视图,应该权衡视图的优点和缺点,合理地定义视图。
  • 对视图的修改:(1)单表视图操作: 可以进行增删改, 但是要实现新增: 前提是视图必须包含基表的所有不能为空的字段。(2)多表视图(基表来源两个以上)不能插入数据, 也不能删除数据,但是可以修改数据。

使用视图还是有很多局限性的,并没有像直接使用表那么方便。如果视图定义中包含了group by、union、聚合函数以及其他一些特殊情况,就不能被更新了;更新视图的查询也可以是一个关联语句,但是被更新的列必须来自同一张表;而且所有使用临时表算法实现的视图都无法被更新。

编辑于 2019-09-04 14:21