MySQL视图

Posted 风@太@大

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL视图相关的知识,希望对你有一定的参考价值。

视图:view,是一种有结构(有行有列)但是没有结果(结构中不真实的存放数据)的虚拟表,虚拟表的结构来源不是自己定义,而是从对应的基表中产生(视图的数据来源);

视图意义:

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

  2、数据安全:视图的操作是主要针对查询的,如果对视图结构进行删除处理,不会影响基表数据(相对安全)。

  3、视图往往是在大项目中使用,而且是多系统使用。(想想现在的微信,有多少项目是基于微信开发的,但是微信不可能提供数据库基表的,但是可以给提供视图,因为视图在查询时候是可以提供自己想给的select语句的,比如:我提供没有查询学号的select语句,封装到视图里面。)

    可以对外提供有用的数据,但是隐藏关键(无用)的数据。

  4、视图可以对外提供友好型:不同的视图提供不同的数据,好像是对外专门设计的。(比如与其他公司合作,可以专门提供不同公司所需要的不同数据,用视图进行封装,这个与第三条有点类似。)

  5、视图可以更好(更容易)的进行权限控制。

一、创建视图:

  格式:

    create view 视图名字 as select 语句;

  查询语句可以是普通查询,连接查询,联合查询,子查询。

  创建单表视图:基表只能有一个

  创建多表视图:基表至少有两个

二、查看视图

  查看视图:查看视图结构

    视图是一张虚拟表:表的所有的查看方式都适用于视图:show tables [like] 视图名字;desc 视图名字; show create 视图名字;

    视图比表还是有一个关键字的区别:view。查看“表(视图)”的创建语句的时候可以用view关键字

  视图一旦创建:系统就会在视图对应的数据库文件夹下创建一个对应的结构文件:frm文件。

三、使用视图

  视图主要是为了查询,将视图当做表一样查询就可以了。

  视图的执行:其实本质就是执行封装的select语句。(可能有疑问,我们还不如去查询基表呢,但是有时候我们写select语句会很长,占一两页,这样我们就可以用视图,进行语句的复用,但是视图不仅仅只有这一个功能,它还有其他功能)

四、修改视图

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

  修改视图:修改视图本身的来源语句(select语句)

  格式:

    alter view 视图名字  as 新的select语句;

五、删除视图

  格式:

  drop view 视图名字(删除视图一般不用,一个复杂select语句是不容易写的,创建这样的视图后,如果该select语句没有保存,那么就玩完了。)

 

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

  视图算法分为三种:

    1、undefined:未定义(默认的),这不是一种实际使用的算法,是一种推卸责任的算法,告诉系统,视图没有定义算法,系统自己看着办。

    2、temptable:临时表算法:系统应该先执行视图的select语句,后执行外部查询语句。

    3、merge:合并算法:系统应该先将视图对应的select语句与外部查询视图的select语句进行合并,然后执行(效率高)

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

    格式:

      create algorithm = 指定算法  view 视图名字 as select 语句;

 

  视图算法选择:如果视图的select语句中会包含一个查询子句,而且很有可能顺序比外部的查询语句要靠后,一定要使用算法temptable,其他情况可以不指定(默认就可以了)

 视图对数据的操作:

  视图是可以进行数据的操作,但是有很多的限制。将数据直接在视图上进行操作。

一、新增数据(如果给别人视图,一般是不会给他人操作基表权限的)

  数据的新增,就是直接对视图进行数据的新增

    1、多表视图不能进行新增

    2、可以向单表视图插入数据:但是视图中包含的字段必须有基表中所有不能为空(或者没有默认值)的字段。

 

    3、向基表中插入数据

 

二、删除数据

  1、多表视图不可以删除(连接的视图)

  2、单表视图的删除

 

 

三、更新数据

  一、单表视图与多表视图都是可以修改成功的。

    更新限制:with check option,如果对视图在新增的时候,限定了某个字段有限制,那么在对视图进行数据更新操作时候,系统会进行验证,要保证更新之后,数据依然可以被实体查询出来,否则不让更新。

    

以上是关于MySQL视图的主要内容,如果未能解决你的问题,请参考以下文章

mysql中,啥是视图,视图的作用是啥

mysql中的视图

为啥MYSQL很少人用视图,MYSQL的视图和MSSQL的视图有啥本质区别。

关于mysql视图的问题。见补充

mysql视图

mysql视图的作用是啥