在查询中 , 我们经常把查询结果 当成临时表来看 .
View 是什么 ? View 可以看一张虚拟表 . 是表通过某种运算得到的一个投影 .
既然视图只是表的某种查询的投影 , 所以主要步骤在于查询表上 . 查询的结果命名为视图就可以了 .
视图与表的关系
视图是表的查询结果 , 自然表的数据改变了 , 影响视图的结果 .
视图改变了呢 ?
0: 视图增删改也会影响表
1: 但是 , 视图并是总是能增删改的 .
视图某种情况下 , 是可以修改的 .
要求 : 视图的数据和表的数据 11 对应 . 就像函数的映射 .
表 --> 推出视图对应的数据
视图 --> 推出表对应的数据
视图的定义 :
视图是由查询结果形成的一张虚拟表 . 是 sql 查询结果
视图的创建语法 :
Create view 视图名 as select 语句 ;
视图的删除语法 :
Drop view 视图名
视图的修改
Alter view 视图名 as select xxxxxx
为什么要视图 ?
答 :1: 可以简化查询
2: 可以进行权限控制
把表的权限封闭 , 但是开放相应的视图权限 , 视图里只开放部分数据
3: 大数据分表时可以用到
比如 , 表的行数超过 200 万行时 , 就会变慢 ,
可以把一张的表的数据拆成 4 张表来存放 .
视图的 algorithm
Algorithm = merge/ temptable/ undefined
Merge: 当引用视图时 , 引用视图的语句与定义视图的语句合并 .
Temptable: 当引用视图时 , 根据视图的创建语句建立一个临时表
Undefined: 未定义 , 自动 , 让系统帮你选 .
Merge, 意味着视图只是一个规则 , 语句规则 , 当查询视图时 ,
把查询视图的语句 ( 比如 where 那些 ) 与创建时的语句 where 子句等合并 , 分析 .
形成一条 select 语句 .
例 : 创建视图的语句 :
mysql> create view g2 as select goods_id,cat_id,goods_name,shop_price from goods where shop_price>2000
查询视图的语句 :
select * from g2 where shop_price < 3000;
最终执行的语句 :
select goods_id,cat_id,goods_name,shop_price from goods where shop_price > 2000 and shop_price < 3000
而 temptable 是根据创建语句瞬间创建一张临时表 ,
然后查询视图的语句从该临时表查数据 .
create algorethm=temptable view g2 as select goods_id,cat_id,goods_name,shop_price from goods where shop_price > 2000
查询视图的语句 :
select * from g2 where shop_price < 3000;
最终执行的 2 句话 : 取数据并放在临时表 , 然后去查临时表 .
Select goods_id,cat_id,goods_name,shop_price from goods where shop_price > 2000;
========> temptable
再次查临时表
Select * from temptable where shop_price< 3000