SQL视图总结

什么是视图?

视图是从一个或多个表导出的虚拟的表,其内容由查询定义。具有普通表的结构,但是不实现数据存储,所以用户不需要担心视图会充满磁盘空间。

而且,对视图的操作和对普通表的操作一样。

创建视图的例子:

假设我这有一张用户信息表,如下所示
在这里插入图片描述
我现在想对用户提供一个用户 id 在 10 以下的包含用户姓名、头像地址、性别这三个属性的视图,那么执行以下语句。

CREATE VIEW person_view(
name,
profile_img,
wechat_id)

AS SELECT name,profile_img,wechat_id 
FROM tb_person_info 
WHERE user_id < 10;

在这里插入图片描述
之后,对这种数据的查询就无需再执行同样的 sql 语句,直接去视图获取数据即可。

为什么要使用视图?

使用视图主要有保证数据安全、简化复杂的SQL操作等优点。下面我们来详细看一下这两个优点。

1. 数据安全

用户只能查询和修改能看到的数据。因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以将基表中重要的字段信息,不通过视图给用户,视图是动态的数据的集合,数据是随着基表的更新而更新。

2. 简化复杂的 SQL 操作

复杂的连接,比如某查询操作涉及好多表,有很多过滤条件,并且这个操作频繁的发生,那么这个时候就可以为它创建一个视图,以后再执行相同的操作的时候,就直接执行 select * from view 就可以了,这样就不必执行总是重复的执行那么一大串的 sql 操作,减少了很多不必要的开销。

扫描二维码关注公众号,回复: 6680729 查看本文章

视图的缺点

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

可更新的视图

MySQL 允许用户在遵守特定规则的前提下通过视图修改数据。

对于 MySQL 来说,如果下面的条件能够满足,那么视图就是可更新的。

  • 没有使用聚合函数,比如 MAX()、MIN()、AVG() 等
  • 视图没有使用 group by 或者 having 子句
  • select 或 from 子句中不存在子查询,并且 where 子句中的任何子查询都不引用 from 子句中的表
  • 视图没有使用 union、union all、distinct
  • from 子句包括不止一个表或可更新视图
  • 如果有不止一个表或视图,那么 from 子句只使用内连接

猜你喜欢

转载自blog.csdn.net/u013568373/article/details/93869982