Mysql视图用法


视图:view


如果某个查询结果出现的非常频繁,也就是,靠这个结果当做进行子查询出现的非常频繁。


类似于下面这两句的思路,我们想把结果保存到表里,供下次查询用。

create table g2 like goods;

insert into g2 select ....


视图的定义:视图是由查询结果形成的一张虚拟表。


视图的创建关键在于select语句上。


(1)视图的创建语法:

create view 视图名 as select语句;


(2)视图的删除语法:

drop view 视图名;


为什么要视图?

1.可以简化查询,

比如我们已经创建了一个名为lmj的视图,那么可以在它的上边直接进行查询:

select * from lmj order by pj desc limit 3;


2.可以进行权限控制

想要不把某些表的列的权限给用户看,可以通过创建视图屏蔽某些列。

create view clonegoods as select goods_id,cat_id,goods_name from goods;     

这一句创建的视图只给客户看goods_id,cat_id,goods_name


3.大数据分表时可以用到

比如:表的行数超过200万行时,就会变慢。

可以把一张表的数据拆成4张表来存放。

news表

newsid 1,2,3,4

分成:news1,news2,news3, news4表


把一张表的数据分散到四张表里,分散的方法很多,最常用可以用id取模来计算。

id%4+1 = [1, 2, 3, 4]


比如:$_GET['id'] = 17,17%4+1=2, $tablename = 'news2'

所以 select * from news2 where id = 17;                #我们在表2里面查找17就行了。


也可以用视图,把4张表形成一个视图:

create view news as select news1 union select from news2 union ....


(3)视图的修改

alter view as select语句;
这种做法相当于新建了一个视图把原来的代替掉了。


视图与表的关系:
视图是表的查询结果,表的数据改变了视图自然会改变。
但是视图的改变有可能改变表的结果,有可能不会。
比如视图呈现的结果是表的平均值,更改了视图中此值,根本无法在表中的到可行的对应修改方案,所以表的数据不会修改。并且这类不能修改的视图在update时会报错。


什么情况修改视图并且可以影响表呢?
视图的数据与表的数据一一对应时,可以修改。
对于视图必须insert还应注意,视图必须包含表中没有默认值的列。


视图的algorithm = merge, temptable,undefined

merger:当引用视图的时,引用视图的语句和定义视图的语句合并
temptable: 当引用视图时,根据视图的创建语句建立一个临时表
undefined:未定义,让系统选择algorithm


merge意味着视图只是一个 语句规则,当查询视图时,把查询视图的语句(比如where)与创建时的where子句等合并分析,形成一条select语句。
不过要注意,如果用的是group如:
创建视图语句为:create view g2 as select goods_id,cat_id,goods_name,shop_price from goods order by cat_id shop_price desc;
查询视图语句为:  select * from g2 group by cat_id;
merger后的语句为:create view g2 as select goods_id,cat_id,goods_name,shop_price from goods  group by cat_id order by cat_id shop_price desc;可能的不到想要的结果。
所以 merge仅仅体现语句叠加的效果。


而temptable是根据创建语句瞬间创建一张临时表,然后查询视图的语句从该临时表查询数据。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值