mysql进阶学习mysql视图(小白学习)

-------什么是视图

视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变);

可以跟基本表一样,进行增删改查操作(ps:增删改操作有条件限制);


接下来用例子开讲吧:

先建一个商品goods表


加上一点数据上去

此时我们需要查询market_price比shop_price要高多少则需要使用select语句进行查询


但是这是可能会有一个问题,假如我每次都需要去取当然会很麻烦,这个时候可以通过创建一个虚拟表来进行操作

create view vgood as select goods_id,goods_name,(market_price-shop_price) as more from goods;

这个vgood是一个虚拟表,然后后面的是sql查询的结果,所以以后每次查询market_price-shop_price的差价只需要sel

ect * from vgood 就行,这样子就简化了很多的操作,这也使得view可以将一句复杂的语句转化为view进行书写。


---关于视图view的功能

1.权限控制

例如管理员可以查询到所有用户的所有信息,但是用户只能看到一些非隐私的信息,这个时候可以通过视图开放一列或几列来展示信息。

2.简化复杂查询

当一些sql一句十分复杂时,这时候完全可以通过view来将这条复杂的语句分开先创建一个view在进行后续的增删改查。


---视图与表的关系

update goods set shop_price = 20 where goods_name='apple';这个时候我们对goods表里面的进行修改,可以发现在视图的里面这个值也改变了。


这时候的apple的差价为0,

同理在视图中对物理表进行修改也会改变值。

那么疑问来了,那么视图和物理表没有区别了吗?

这回我们来使用函数avg进行一下测试


 先创建视图avg 

create view avg as select goods_name,sum(market_price+shop_price) as sum from goods group by goods_id;


那么现在我们update一下苹果的sum;


直接报错,为什么呢,很明显我们这视图这里改了一行,那物理表该怎么变呢,原因是他这边改变了一个值,数据库是无法识别物理表这边该怎么改;所以我们可以得出结论:

在一般情况下,视图的修改和物理表的修改两者可以相互转换,但是涉及到在view这边修改一行而影响物理表多行时是无法改变的






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值