1、视图定义:
视图是由查询结果形成的一张虚拟表
视图的创建语法:
Create view 视图名 as select 语句视图的删除语法:
Drop view视图的修改
Alter view as select xxxxxxx
2、为什么要视图?
1、可以简化查询
2 、以进行权限控制,把表的权限封闭,但是开发相应的视图权限,视图里只开放部分数据
3、大数据分表时可以用到
比如表的行数超过200万行时,就会变慢,可以把一张的表的数据拆成4张表来存放news表
news1,news2,news3,news4表
- 把一张表的数据分散到4张表里,分散的方法很多,
最常用可以用id,取模来计算
Id%4+1 = [1,2,3,4]
- 把一张表的数据分散到4张表里,分散的方法很多,
还可以用视图,把4张表形成一张视图
Create view news as select from n1 union select from n2 union……
3、视图与表的关系
视图是表的查询结果,表的数据改变了,影响视图的结果
视图改变了呢?
视图增删改也会影响表
但是,视图并不总是能增删改的
答:视图的数据与表的数据 一 一对应时.可以修改
对于视图insert 还应注意,视图必须包含表中没有默认值的列
4、视图的algorithm
Algorihm = merge temptable undefined
Merge:当引用视图时,引用视图的语句与定义视图的语句合并
Temptable:当引用视图时,根据视图的创建语句建立一个临时表
Undefined:未定义,自动,让系统帮你选
(1)、Merge,意味着视图只是一个规则,语句规则,当查询视图时,
把查询视图的语句与创建时的语句合并,分析形成一条select语句
例:创建视图语句:
Create view g2 as select goods_id,cat_id,goods_name,shop_price from goods order by cat_id asc,shop_price desc;
查询视图的语句:
Select * from g2 group by cat_id;
最终执行的语句:
Select goods_id,cat_id,goods_name,shop_price from goods group by cat_id order by cat_id asc,shop_price desc;
(2)、temptable是根据创建语句瞬间创建一张临时表,然后查询视图的语句从该临时表查询数据
Create altorethm=temptable view g2 as select goods_id,cat_id,goods_name,shop_price from goods order by cat_id asc,shop_price desc;
查询视图的语句:
Select * from g2 group by cat_id;
最终执行的2句话,取数据并放在临时表,然后去查临时表.