MySQL——视图

MySQL——视图

视图即是虚拟表,也称为派生表,因为它们的内容都派生自其它表的查询结果

特点

优点:
1、简化操作:不用关心视图是怎么处理数据的,我们只需要知道如何使用这个结果集即可,视图相当于一个中间层;
2、安全:比如我们可以让用户有权去访问某个视图,但是不能访问原表,这样就可以起到保护原表中某些数据的作用。另外,权限是无法细致到某一个列的,通过视图,则很容易实现;
3、降低耦合:假如我们以后要修改原表的结构,那么我们可以通过修改视图的定义即可,而不用修改应用程序,对访问者是不会造成影响的,一般来说,这样代价会更小。

缺点:
性能:从数据库视图查询数据可能会很慢,特别是如果视图是基于其他视图创建的;
表依赖关系:将根据数据库的基础表创建一个视图。每当更改与其相关联的表的结构时,都必须更改视图。

算法类型

MERGE算法
将视图的sql语句和引用视图的sql语句合并在一起,最后一起执行。
注:使用如下SQL构造块,merge算法无法使用(聚集函数、DISTINCT、GROUP BY、HAVING、集合操作(在MySQL中只有UNION, UNION ALL,没有EXCEPT和INTERSECT)、子查询)

/** 定义两张表
seller_sku表包括以下字段:id(主键),seller_id(门店ID),sku_id(商品sku的id,对应goods_sku的id),amount(商品的库存)
goods_sku 表包括以下字段:id(主键),goods_name(sku的名称)
**/

#案例1 查询商品库存大于50的门店的商品所对应的成本

CREATE OR REPLACE  VIEW amount_50_sku AS
SELECT
seller_id,
price,
sku_id,
amount,
(price*amount) AS sku_values 
FROM 
sellers_sku WHERE amount > 50

#方法A
SELECT * FROM amount_50_sku  

#方法B
SELECT seller_id,price,sku_id,amount,(price*amount) AS sku_values FROM sellers_sku `在这里插入代码片`

TEMPTABLE算法(临时表算法)
将视图的结果集存放在临时表中,每次执行时从临时表中操作。
注:先执行视图的select语句,然后在执行外部查询Select语句。

/**
seller_sku表包括以下字段:id(主键),seller_id(门店ID),sku_id(商品sku的id,对应goods_sku的id),amount(商品的库存)
goods_sku 表包括以下字段:id(主键),goods_name(sku的名称)
**/

#案例2 显示每个商品各个门店库存的总和

#创建视图
CREATE OR REPLACE VIEW seller_sku_amount AS SELECT
sku_id,
SUM(amount) AS amount_total
FROM sellers_sku
GROUP BY sku_id


#使用视图查询
SELECT 
seller_sku_amount.sku_id,
seller_sku_amount.amount_total,
goods_sku.*
 FROM seller_sku_amount JOIN goods_sku ON goods_sku.`id` = seller_sku_amount.`sku_id`
 
 
#原生SQL查询
SELECT
sellers_sku.sku_id,
SUM(sellers_sku.amount) AS amount_total,
goods_sku.*
FROM sellers_sku
JOIN goods_sku ON sellers_sku.`sku_id` = goods_sku.`id`
GROUP BY sku_id
ORDER BY amount_total DESC

UNDEFINED算法
默认的视图类型,DBMS倾向于选择而不是必定选择MERGE,因为MERGE的效率更高,更重要的是临时表视图不能更新

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值