(16)视图(view)

来源:互联网 发布:java可以编写木马 编辑:程序博客网 时间:2024/06/07 10:13

一、视图定义

视图:是由查询结果形成的一张虚拟表(也是表)

二、语法
创建:create view 视图名 as select 语句
删除:drop view 视图名
修改:alter view as select …..(建议先删除再创建)

三、为什么要视图?
1)可以简化查询
2)可以进行权限控制,但是开发相应的试图权限,视图里只开放部分数据
3)大数据分表时可以用到
比如表的行数超过200万,就会明显变慢,可以把一张表的数据拆成四张表来存放
最常用的是可以用id取模来计算,id%4+1=【1,2,3,4】
还可以用视图,把四张表形成一个视图 create view news as select from n1 union n2…..

四、视图与表的关系

视图是表的查询结果,自然表的数据改变了,影响视图的结果,(视图依赖于表)
视图改变:视图增删改也会影响表,但是,视图并不是总能增删改的
(当视图的数据与表的数据一一对应时,可以修改。对于视图insert还应注意,视图必须包含表中所有没有默认值的列)
对于视图insert还应注意,视图必须包含表中没有默认值的列的理解:
比如创建的视图就是表的几列,当在视图中插入数据是,相当于表中也插入数据,并且能够插入成功,那么剩余的表的所有列必须含有默认值

五、视图的algorithm
algorithm=merge/temptable/undefined
merge:当引用视图时,引用视图的语句与定义视图的语句合并
意味着视图只是一个语句规则,房查询视图时,把查询视图的语句(比如where那些)与创建时的语句where子句等合并,分析
temptable:当引用视图时,根据视图的创建语句建立一个临时表
然后查询视图的语句从该临时表查数据
undefined:未定义,自动,让系统帮你选

//创建视图create view exp as  select goods_id,goods_name,shop_price from goods where shop_price>100;//平均价格前三的栏目1)首先得到各个栏目的平均价格select  cata,avg(shop_price)as avgprice from goods group by cata;//然后创建视图对栏目和平均价格进行操作create view expen as select  cata,avg(shop_price)as avgprice from goods group by cata;select cata,avgprice as maxAvgprice from expen order by avgprice desc limit 3;//可以进行列权限控制,商品信息不让别人看见价格drop view if exists clonegoods;create view clonegoods as select goods_id,goods_name,shop_price from goods;
原创粉丝点击