mysql视图小记

1、视图语法

(1)创建视图

create view 视图名称 as select ...

(2)删除视图

drop view 视图名称

(3)更新视图

alter view 视图名称 as select ...

2、视图与表的关系

视图是表的查询结果。

表的数据改变了,视图的数据也改变;

视图的数据改变,表的数据不一定改变。

当视图的数据与表的数据一一对应时,表数据随视图数据改变而改变;当视图数据与表数据不一一对应时,表的数据不随视图的数据的改变而改变,甚至不能(执行update视图数据时)改变视会报错图的数据,因为多个表数据构成视图的数据,如果改变视图数据,mysql不知道要怎样改变的数据,所以会报错,不让改变视图数据。

:对于视图insert应注意,视图insert时必须包含表中没有默认值的列,否则视图不知给没有默认值的列取什么值。

3、视图的算法(algorithm)

视图的algorithm有merge、temptable和undefined三种。

merge:当引用视图时,引用视图的语句与定义视图的语句合并,引用视图的操作对象是原表;

temptable:当引用视图时,根据视图的创建语句建立一个临时表,引用视图的操作对象是临时表;

undefined:未定义,让系统选。

4、merge使用案例:

创建视图的语句

create view algorithm=merge g1 as select goods_id,cat_id,goods_name,shop_price from goods order by cat_id,shop_price desc;

查询视图的语句

select * from g1 group by cat_id;

上述查询视图语句相当于执行了如下的sql

select good_id,cat_id,goods_name,shop_price from goods group by cat_id order by cat_id,shop_price desc;

5、temptable使用案例

创建视图语句

create view algorithm=temptable 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;

上述查询视图语句相当于 先创建了一个临时表g2,g2里面存放的是从goods表中查询出来的数据,该数据是按照cat_id升序,shop_price降序排列后的goods_id,cat_id,goods_name,shop_price。然后从临时表g2中按cat_id group查询出数据goods_id,cat_id,goods_name,shop_price。这样能够实现从商品表中查询出每个cat的最高shop_price的商品信息。使用merge算法的视图没有实现此功能。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值