Mysql视图使用总结

视图View使用总结:
视图可以看作为“虚拟表”,因为它返回的结果集格式与实体数据表返回的数据集格式类似,并且引用视图的方式与引用数据表的方式相同。每次查询使用视图时,DBMS会动态生成视图结果集所需要的逻辑合并到从基表数据生成的结果集逻辑中。(技术讨论群:276592700(新))

l什么是视图?
l视图的特点?
l视图的类型?
l视图的使用?

一、什么是视图
视图是一个从一张或几张数据表或视图中导出的虚拟表,它的作用类似于对数据表进行筛选,必须使用SQL语句中的SELECT语句实现构成。在定义视图时,只是把视图的定义存放在数据库,并不保存视图的数据,直到用户使用视图时才进行数据的查询并返回操作,当需要从不同的服务器中获得数据时,使用视图可以很好的将结构相同的数据组织并返回。

二、视图的特点
视图的主要特点如下:
1、简化数据的操作
用户可以将经常使用的连接,联合查询、及选择查询定义为视图,这样每次调用的时候,只需要简单的调用视图即可。另外,视图可以隐藏表表间的复杂关系。
2、可作为安全机制
视图可以用来做安全机制。用户可以通过设置视图,使特定的用户只能查看或修改他们权限内的数据,其它的数据库或表不能进行操作。视图的安全性可以防止未授权的用户查看或操作特定的列或行,通过在你表中设置一个用户的标志来建立视图,使用户只能查看或操作标志自己标志的列或行,从而保证数据的安全性。
3、合并及分割数据
有的时候,由于表中的数据量太大,需要对表进行拆分,这样会导致表的结构发生变化,导致用户的应用程序受到影响,这时我们就可以使用视图来屏蔽实体表间的逻辑关系,去构建应用程序所需要的原始表关系。
4、数据的倒入导出
实际项目中,我们经常会使用视图来组织和导入及导出操作,十分方便。

三、视图的类型
因为不同的数据库,例如:Mysql、Sql Server、Oracle及DB2等,他们不论在视图的创建和类型上都有不同,特别是在类型上区别较大,所以这里我们以Mysql来说明总结,至于其它数据的特点会在日后继续更新。
在Mysql中视图的类型分为:
1、MERGE
将视图的sql语句和引用视图的sql语句合并在一起,最后一起执行。
2、TEMPTABLE
将视图的结果集存放在临时表中,每次执行时从临时表中操作。
3、UNDEFINED
默认的视图类型,DBMS倾向于选择而不是必定选择MERGE,因为MERGE的效率更高,更重要的是临时表视图不能更新。
所以,这里推荐使用MERGE算法类型视图。

四、视图的使用
下面我们以实例说明视图的使用过程,例子是这样的:在电商网站中,需要经常对商品的类目、单品及单品详情合并查询,这时我们就可以使用视图来简化这个查询操作,当然首先需要三张数据表(表结构),具体如下:
商品类型表:
CREATE TABLEt_product_type
(
id integer(2) AUTO_INCREMENT,
ptno varchar(20) NOT NULL UNIQUE COMMENT '产品类型编号',
ptname varchar(30) NOT NULL COMMENT '产品类型名字',
ptdesc varchar(60) NULL COMMENT '产品类型描述',
pttime datetime NOT NULL COMMENT '产品类型上架时间',
PRIMARY KEY(id)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
商品单品表:

CREATE TABLEt_product_item
(
id integer(6) AUTO_INCREMENT PRIMARY KEY,
pino varchar(20) NOT NULL UNIQUE COMMENT '单品编号',
piname varchar(50) NOT NULL COMMENT '单品名字',
piimage varchar(80) NOT NULL COMMENT '单品图片链接',
piprice float NOT NULL COMMENT '单品价格',
pitime datetime NOT NULL COMMENT '单品上架时间',
pifid integer(2) NOT NULL COMMENT '所属的类型外键',
FOREIGN KEY(pifid) REFERENCESt_product_type(id)
) ENGINE=InnoDBDEFAULT CHARSET=UTF8;
单品详情表:
CREATE TABLEt_product_detail
(
idinteger(6) AUTO_INCREMENT PRIMARY KEY,
pdnamevarchar(50) NOT NULL COMMENT '单品名字',
pdimagevarchar(80) NOT NULL COMMENT '单品图片链接',
pdprice float NOT NULL COMMENT '单品价格',
pdtime datetime NOT NULL COMMENT '单品上架时间',
pddesc varchar(80) NULL COMMENT '单品描述',
pdrule varchar(80) NOT NULL COMMENT '单品规格',
pdfid integer(6) NOT NULL COMMENT '所对应的单品外键',
FOREIGN KEY(pdfid) REFERENCESt_product_item(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

好了,三张数据表创建完成了,请自行插入测试数据(注意:因为有约束存在,所以注意插入数据的顺序及删除的顺序),接下来我们使用视图关联查询三张表。

1、创建视图
格式:
CREATE [OR REPLACE] [ALGORITHM= {MERGE|TEMPTABLE|UNDEFINED}]
VIEW view_name [(column_list)]AS select_statement [WITH
[CASCAD|LOCAL] CHECKOPTION]
创建:
CREATEALGORITHM=MERGE VIEW view_product_tid AS
SELECTpt.ptno,pt.ptname,pi.pino,pi.piname,pi.piprice,
(SELECT pddesc FROMt_product_detail pd WHERE pd.pdfid = pi.id) pddesc FROM t_product_type pt INNERJOIN t_product_item pi ON pt.id = pi.pifid;
测试:
SELECTptno,ptname,pino,piname,piprice,pddesc FROM view_product_tid;
结果:

Mysql视图使用总结
文章图片

2、修改视图
格式:
CREATE [OR REPLACE][ALGORITHM = {MERGE|TEMPTABLE|UNDEFINED}]
VIEW view_name[(column_list)] AS select_statement [WITH
[CASCAD|LOCAL] CHECKOPTION]
修改:
ALTER ALGORITHM =MERGE VIEW view_product_tid
AS SELECTpt.ptno,pt.ptname,pi.pino,pi.piname,pi.piprice
FROM t_product_typept INNER JOIN t_product_item pi ON pt.id = pi.pifid;

3、查看视图
如何使用:
SELECTptno,ptname,pino,piname,piprice,pddesc FROM view_product_tid;
查看语句:
SHOW CREATE VIEWview_product_tid;

4、删除视图
DROP VIEW IF EXISTSview_product_tid;


好了,到这里就介绍完了视图的基本的内容。


【Mysql视图使用总结】

    推荐阅读