1、什么是视图
视图(view)是一种有结构(有行有列)但是没有结果(结构中不真实存放数据)的虚拟表,虚拟表的结构来源不是自己定义,而是从对应的基表中产生(视图的数据来源)。
2、创建视图+查看视图
- 基本语法:
create view 视图名字 as select 语句 --select 语句 可以是普通查询、可以是连接查询、可以是联合查询、可以是子查询
查看视图语法和 查看表的语法一样。
- 创建单表视图:基表只有一个 ,效果如图所示
- 创建多表视图 :基表来源至少两个 ,效果如图所示
3、查看视图结构
查看视图的结构 :show create view 视图名\g;
4、修改视图
视图本身不可修改,但视图的来源可以修改, 修改视图就是修改本身的来源语句(select 语句)
语法:alter view 视图名字 as 新的 select 语句。效果如图所示:
5、删除视图
删除视图比较简单,删除视图后对于基表没有影响 如图所示。
语法:drop view 视图名 ;
6、视图意义
- 视图可以节省SQL语句:将一条复杂的查询语句使用视图进行保存,以后可以直接对视图进行操作。
- 数据安全:视图操作主要是针对查询的,如果对视图结构进行处理(删除),不会影响基表数据(相对安全)
- 视图往往是在大项目中使用,而且是多系统使用,可以对外提供有用的数据,隐藏关键(无用)的数据,数据安全。
- 视图可以对外提供友好性,不同的视图提供不同的数据,对外好像专门设计。
- 视图可以更好(容易)的进行权限控制。
7、视图算法
视图算法:系统对视图以及外部查询视图的select 语句的一种解析
视图算法分为三种
- Undefined 未定义(默认的)这不是一种实际使用算法,是一种推卸责任的算法,告诉系统,视图没有定义算法,系统自己看着办。
- Temptable :临时表算法,系统应该先执行视图的select 语气,后执行外部查询语句。
- Merge :合并算法 :系统应该先将视图对应的select 语句与外部查询视图的select语句进行合并,然后执行(效率高:常态)
在视图创建指定算法
语法: create algorithm=指定算法 view 视图名 as select语句
视图算法选择:
如果视图中的select语句中包含一个查询子句(五子句)而且很有可能顺序比外部的查询语句要靠后,一定要使用Temptable 算法
其他情况可以不用指定(默认即可)。