MySQL使用视图

为什么使用视图?

   既然视图存在那就有它存在的必要。换言之,它有优点。

优点:

  • 重用SQL语句
  • 简化复杂的SQL操作。编写查询后,可以方便地重用它而不必知道它而不必知道它的基本查询细节。
  • 使用表地组成部分而不是整个表
  • 保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限
  • 更改数据格式和表示。视图可返还与底层表的表示和格式不同的数据

有优点就有缺点

缺点:

  • 视图不能索引,触发器,默认值或者规则。数据多时会造成影响。
  • 如果用多个连接和过滤条件创建了视图或者嵌套了视图,可能会十分影响性能。

一、视图是什么?

    视图是一个虚拟存在的表,和真实表一样是由行和列构成,视图的数据却不存在于数据库中,存在视图中的只是视图的定义。视图中的数据完全来自于表中,是在使用视图时获取的。视图和表的本质在于视图是基于真实表的一张虚拟的表,它的数据来源于真是表的基础上。

打个比方:真实表与视图,就如同一个物体照镜子,真实表就是就是那个物体,视图就是物体映在镜子里的图像。两者虽说在看着一样,但是镜子的图像是虚拟的,当物体改变时,镜子里映射的影像也会改变。

二、创建视图

       语法 create view 视图名  as select语句

        视图名:视图名必须是唯一命名,新创建的视图名不能和其他的视图名和其他的表名相同

        select语句:指的是创建视图的select语句

例如:创建一个视图

select c.last_name, c.first_name, b.dept_name, c.birth_date
from dept_emp a,
     departments b,
     employees c
where a.dept_no = b.dept_no
  and a.emp_no = c.emp_no;

如果我们要查看查看视图字段情况的的话,可以 采用 describe 视图名

describe  v_user;

如果要查看创建视图的SQL,可以 show create view  视图名

show create view v_user;

二、修改视图

一般将视图用于查询而不是更新用的。要更新的话

采用 alter view 视图名 as select语句   也可以先删除再创建

并不是所有的视图都可以更新的,视图定义中存在以下情况,则是不允许更新的

  • 分组  使用order by 或者 having
  • 聚集函数
  • union或者union all的并操作
  • 子查询
  • distinct关键字

比如,在原视图里减少一个生日字段

alter view v_user as select c.last_name, c.first_name, b.dept_name
                     from dept_emp a,
                          departments b,
                          employees c
                     where a.dept_no = b.dept_no
                       and a.emp_no = c.emp_no;

三、删除视图

那就是 drop view 视图名

drop view  v_user;

四、查询视图

  如果我们要使用视图查询

select * from v_user;

它等价于

select c.last_name, c.first_name, b.dept_name
                     from dept_emp a,
                          departments b,
                          employees c
                     where a.dept_no = b.dept_no
                       and a.emp_no = c.emp_no;

这样看来视图的确是简化了sql 。

生于忧患,死于安乐
原文地址:https://www.cnblogs.com/songlove/p/15570011.html