目录

Sql视图

什么是视图?

  1. 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。视图包含行和列,就像一个真实的表。
  2. 视图是一种不存在的虚拟表: 类似表但是不是表。
  • 类似表: 视图有表结构;
  • 不是表: 没有数据, 视图的数据来源都是基表;
  1. 视图中的字段是来自一个或多个数据库中的真实的表中的字段。
  • 单表视图: 基表只有一个;
  • 多表视图: 基表至少两个以上;
  1. 我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据, 就像这些来自于某个单一的表。
  2. 数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响。
  3. 视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据。 7.可以从某个查询内部、某个存储过程内部,或者从另一个视图内部来使用视图。 通过向视图添加函数、join 等等,我们可以向用户精确地提交我们希望提交的数据。

SQL CREATE VIEW 实例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
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查询语句进行封装。
  2. 安全性,用户只能查询和修改能看到的数据。
  • 使用视图,基表中的数据就有了一定的安全性。因为视图是虚拟的,物理上是不存在的, 只是存储了数据的集合,我们可以不通过视图将基表中重要的字段信息给用户。 视图是动态的数据的集合,数据是随着基表的更新而更新的。 同时,用户对视图,不可以随意的更改和删除,可以保证数据的安全性。
  1. 逻辑上的独立性,屏蔽了真实表的结构带来的影响。
  • 视图的存在: 主要是为了对外提供数据支持(外部系统); 隐藏了基表字段(隐私); 保证了数据库的数据安全(保护数据库内部的数据结构); 可以灵活的控制对外的数据: 保证针对每个接口都有一个单独的数据支持,增强了用户友好性。

视图的缺点

  1. 性能差
  • 数据库必须把视图查询转化成对基本表的查询, 如果这个视图是由一个复杂的多表查询所定义,那么即使是视图的一个简单查询, 数据库也要把它变成一个复杂的结合体,需要花费一定的时间。
  1. 修改限制
  • 当用户试图修改视图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改, 对于简单的视图来说,这是很方便的,但是,对于比较复杂的试图,可能是不可修改的。

  • 在定义数据库对象时,不能不加选择地来定义视图,应该权衡视图的优点和缺点,合理地定义视图。

  • 对视图的修改:(1)单表视图操作: 可以进行增删改, 但是要实现新增: 前提是视图必须包含基表的所有不能为空的字段。 (2)多表视图(基表来源两个以上)不能插入数据, 也不能删除数据,但是可以修改数据。

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