一、什么是视图
- 视图是一个从一张或几张数据表或视图中导出的虚拟表,它的作用类似于对数据表进行筛选,必须使用SQL语句中的SELECT语句实现构成。在定义视图时,只是把视图的定义存放在数据库,并不保存视图的数据,直到用户使用视图时才进行数据的查询并返回操作,当需要从不同的服务器中获得数据时,使用视图可以很好的将结构相同的数据组织并返回。
二、视图的特点
视图的主要特点如下:
1、简化数据的操作
用户可以将经常使用的连接,联合查询、及选择查询定义为视图,这样每次调用的时候,只需要简单的调用视图即可。另外,视图可以隐藏表表间的复杂关系。
2、可作为安全机制
视图可以用来做安全机制。用户可以通过设置视图,使特定的用户只能查看或修改他们权限内的数据,其它的数据库或表不能进行操作。视图的安全性可以防止未授权的用户查看或操作特定的列或行,通过在你表中设置一个用户的标志来建立视图,使用户只能查看或操作标志自己标志的列或行,从而保证数据的安全性。
3、合并及分割数据
有的时候,由于表中的数据量太大,需要对表进行拆分,这样会导致表的结构发生变化,导致用户的应用程序受到影响,这时我们就可以使用视图来屏蔽实体表间的逻辑关系,去构建应用程序所需要的原始表关系。
4、数据的倒入导出
实际项目中,我们经常会使用视图来组织和导入及导出操作,十分方便。
三、视图的类型
- 因为不同的数据库,例如:MySQL、Sql Server、Oracle及DB2等,他们不论在视图的创建和类型上都有不同,特别是在类型上区别较大,所以这里我们以Mysql来说明总结,至于其它数据的特点会在日后继续更新。
在Mysql中视图的类型分为:
1、MERGE
将视图的sql语句和引用视图的sql语句合并在一起,最后一起执行,见下图左。
2、TEMPTABLE
将视图的结果集存放在临时表中,每次执行时从临时表中操作,见下图右。
3、UNDEFINED
默认的视图类型,DBMS倾向于选择UNDEFINED而不是必定选择MERGE,因为MERGE的效率更高,更重要的是临时表视图不能更新。
所以,这里推荐使用MERGE算法类型视图。
四、视图的使用
- 下面我们以实例说明视图的使用过程,例子是这样的:在电商网站中,需要经常对商品的类目、单品及单品详情合并查询,这时我们就可以使用视图来简化这个查询操作,当然首先需要三张数据表(表结构),具体如下:
## 商品类型表:
CREATE TABLE IF