视图(view)

一、视图(view)

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

1.创建视图

create view 视图名 as select 语句;

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

(1)创建单表视图
(2)创建多表视图

视图(view)_第1张图片
创建视图:单表+多表

2.查看视图

查看试图:查看视图结构

  • show tables;
  • desc 视图名;
  • show create table 视图名;

3.使用视图
使用视图主要是为了查询。将视图当作表一样查询即可。
视图的执行:其实本质就是执行封装的select语句。

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

修改视图:修改视图本身的来源语句(select语句)
alter view 视图名 as 新的 select 语句;

视图(view)_第2张图片
修改视图

5.删除视图

drop view 视图名;

删除视图

6.视图意义

  • 视图可以节省sql语句:将一条复杂的查询语句使用视图进行保存,之后可以直接对视图进行操作。
  • 数据安全:视图操作主要针对查询,如果对视图结构进行处理(删除),不会影响基表数据(相对安全)
  • 视图往往是在大系统中使用,而且是多系统使用。对外提供有效数据,隐藏关键的数据。
  • 视图可以更好的进行权限控制

二、视图数据操作

1.新增数据
视图新增就是直接对视图进行数据新增

  • 多表视图不能新增数据
  • 单表视图可以插入数据。但是视图中包含的字段必须有基表中所有不能为空(或者没有默认值)字段。
  • 视图是可以向基表插入数据的
视图(view)_第3张图片
视图向基表插入数据

2.删除数据

  • 多表视图不能删除数据
  • 单表视图删除数据
视图(view)_第4张图片
单表删除数据

3.更新数据

  • 多表视图更新数据
视图(view)_第5张图片
多表视图更新数据
  • 更新限制(with check option)
    如果对视图在新增的时候,限定了某个字段有限制:那么在对视图进行数据更新的操作时,系统会验证——保证更新后,数据依然可以被实体查出来,否则不让更新。
视图(view)_第6张图片
更新限制

三、视图算法

视图算法:系统对视图以及外部查询视图的select语句的一种解析方式。
当查询信息时遇到了相同的信息,系统会自动选其中一个(看图3.1)

视图(view)_第7张图片
3.1

当这种情况发生如何解决?
因此就有了视图算法

视图算法

  • undefined:未定义(默认的),这不是一种实际算法,只是用来告诉系统视图没有定义算法,系统自己定义。
  • temptable:临时表算法。系统先执行视图的select语句,后执行外部查询语句
  • merge:合并算法。系统先将视图对应的select语句与外部的视图查询语句的select语句进行合并,然后执行(效率高)

算法指定:在创建视图的时候
create algorithm = 制定算法 view 视图名 as select 语句;

视图(view)_第8张图片
临时算法

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

你可能感兴趣的:(视图(view))