视图 view
概念
视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个 select 语句保存在数据字典中的。
通过视图,可以展现基表的部分数据;视图数据来自定义视图的查询中使用的表,使用视图动态生成。
基表:用来创建视图的表叫做基表 base table
优点
简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。
安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。
数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。
总而言之,使用视图的大部分情况是为了保障数据安全性,提高查询效率
使用
创建视图
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
OR REPLACE:表示替换已有视图ALGORITHM:表示视图选择算法,默认算法是 UNDEFINED(未定义的):MySQL 自动选择要使用的算法 ;merge 合并;temptable 临时表select_statement:表示 select 语句[WITH [CASCADED | LOCAL] CHECK OPTION]:表示视图在更新时保证在视图的权限范围之内WITH CHECK OPTION:表示视图在更新时保证约束,默认是CASCADED。
TIP
一般情况下视图只用于查询,视图本身没有数据,因此对视图进行的 DML 操作最终都体现在基表中,对视图进行 delete、update、insert 操作,原表同样会更新,drop 视图原表不会变,视图不可以 truncate。但是一般情况下我们要避免更新视图,DML 操作可以直接对原表进行更新。
例:
create view <视图名称> [(column_list)]
as select语句
with check option;
mysql> create view v_F_players(编号,名字,性别,电话)
-> as
-> select PLAYERNO,NAME,SEX,PHONENO from PLAYERS
-> where SEX='F'
-> with check option;
使用视图
使用 desc <视图名称> 查看视图结构
选择视图的时候和选择普通表一样:
select * from <视图名称>
删除视图
语句:
DROP VIEW [IF EXISTS] <视图名称>
物化视图
物化视图是一种特殊的物理表,物化视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性较大,任何对视图的查询实际上都是转换为对 SQL 语句的查询,性能并没有实际上提高。物化视图实际上就是存储 SQL 执行语句的结果,起到缓存的效果。
物化视图不支持增删改操作,只支持查询语句。