MySQL 视图基本操作

版权声明:本文为博主转载文章。 https://blog.csdn.net/qq_35495339/article/details/89159466

视图

视图:view,是一种有结构(有行有列),但是没有结果的虚拟表,

虚拟表的结构来源不是 自己定义的,而是来源对 (select)对应基表中产生的。

创建视图

基表语法:

         Create view 视图的名称  as select 语句

         后面的跟的select语句,可以是普通的查询,也可以是连接查询,也可以是联合查询,子查询

创建单表视图:基表只有一个         创建多表视图:基表有多个(注意多表查询的结果不能有相同的两列) 

查看视图

查看视图:查看视图的结构

视图是一张虚拟表,表的查看方式都适用于视图

Show tables [like ‘patter’]

Desc 视图名称

Show create table/view 视图名

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

使用视图

使用视图的目的为了查询:将视图当做表一样查询即可

修改视图

视图本身是不可修改的,但是可以修改视图的来源

修改视图:修改视图来源select语句

Alter view 视图的名称  as 新的select语句

删除视图

Drop view 视图的名称

视图意义

         (1)视图可以节约SQL语句:将一条复杂的查询语句使用视图进行保存,以后可以直接对视图进行操作。

         (2)数据安全:视图的操作主要是针对查询,可以进行增删改不过有很多限制

         (3)视图往往在大项目中使用,而且是多系统使用:可以对外提供有用的数据,但是隐藏关键(无用)的数据:数据安全。

         (4)视图可以对外提供友好型:不同的视图提供不同的数据,对外专门设计。

视图数据操作

视图的确可以进行数据写操作的,但是有很多限制。

新增数据

1、可以向单表视图插入数据:插入的字段,必须包含所有非空字段。(与向表中插入数据语句一样)

可以向视图插入数据,以此同时基表也插入数据了。

 2、多表视图不能新增数据

删除数据

1、多表视图不能删除数据

2、单表视图可以删除数据

更新数据

理论上不管是单表视图还是多表视图,数据都是可以更新

视图的更新,会导致基本数据的更新

更新限制

With check option:视图在更新数据的时候,可以限制字段的更新,可以给定限定条件

比如员工表的工资,工资是不低于2000

视图算法 

现象

找出各个部门工资最高的那个人

         使用子查询实现

                  (1)按照工资降序

                          select * from emp order by sal desc;

                  (2)按照部门分组

                           select * from ( select * from emp order by sal desc) t group by t.deptno;

                         

使用视图实现

         (1)按照工资排序之后的数据放到视图中

        

         (2)在视图基础上,按照部分分组

        

       (3)我们发现结果不对:视图算法用了:merge合并算法

        

介绍

视图算法:系统对视图以及外部查询视图的select语句的一种解析方式。

         视图:可以理解为子查询,2个select,第一个select:得到视图

视图算法分成3种:

         Undefined:未定义(默认)这不是一种算法,是一种推卸责任的算法

                  告诉系统,视图没有定义算法,系统你自己看着办。

         Temptable:临时表算法:先执行视图的select语句,然后在执行外部查询Select语句。

         Merge:合并算法,系统在执行select语句之前,会对视图的select和外部查询视图的select语句进行合并,然后执行(效率高)

算法的指定

         在创建视图的时候指定算法。

算法选择

如果视图的select语句中包含一个查询子句(order by,limit),而且很可能该 关键字 执行顺序 比外部查询语句 关键字 靠后 一定要使用使用temptable算法,其他情况下不用指定,默认即可。

执行顺序

from。。。where。。。group by。。。[select]。having。。。select。。。order by。。。limit。。。

猜你喜欢

转载自blog.csdn.net/qq_35495339/article/details/89159466